//---------------------------------------------------------------------------------------
//The code for this program was put together in 2001/2 by Robert Breinl <breinlbob@hotmail.com> 2001
//---------------------------------------------------------------------------------------
//******* MAINLINE 
function mainline(){
	
	document.outputPanel.notes.value = "";
	var browser = navigator.appName.slice(0,4);
	var version = parseInt(navigator.appVersion.charAt(0));
	
//	if ((version < 4) || (browser != "Micr")){
//		alert("Parts of this program require Internet Explorer 5.\nIt does not work fully in Netscape Navigator.");
//		return;
//	}

	var output = "";

                      //------------------RECEIVE USER'S SEQUENCE
	var sequence = validateInputSequence();					
	if (sequence == ""){ 
    	alert("First paste your amino acid sequence in the text area.");
    	return;
    }
    
    if (sequence == "RDL not found"){ 
    	alert("The key kinase RDLKPEN motif (or its analog) is used as an initial reference in this program."+"\r\n"+"PREDIKIN could not recognise the sequence as a protein kinase."+"\n\n"+"QUIT NOW!");
		getInTouch();
    	return;
    }
    
   document.outputPanel.notes.value = discriminate(sequence)+ "\r";
   document.outputPanel.notes.value = document.outputPanel.notes.value + "Further notes -\r\r";
   
//--------------------------------------------------------------------	   
	var motifPositions = findKinaseMotifs(sequence);		
	if(motifPositions=="motifs not found"){
		alert("Key kinase motif(s) used as references in this program were not found."+"\r\n\r\n"+"QUIT NOW!");
		getInTouch();
    	return;
	}	
//*******KINASE TYPE****************INPUT FROM RADIO BUTTONS
                    
	for(var i = 0; i < document.inputPanel.length; i++){
		if (document.inputPanel[i].checked){
			break;
		}
	}
	if(i==4){alert("Select kinase type.");return;}
	
	var chosenKinaseType = document.inputPanel[i].value;	
	document.outputPanel[9].value = chosenKinaseType;
	
                    //---------------------OTHERWISE MAKE A GUESS

  	if((document.outputPanel.txtKinaseType.value == "")||(chosenKinaseType == "tyrosine")){
  	  	var reCycDepKinase = /YR[ASP]P[DE][VIL]/;
  		var reTyrKinase = /[LIVMFYC][^A.][HY].D[LIVMFY][RSTAC].{2}N[LIVMFYC]{3}/;
		var tyrKinase = reTyrKinase.exec(sequence);

 		if (tyrKinase!=null){
 		 	chosenKinaseType=document.outputPanel[9].value = "tyrosine";
 		}
 		if (reCycDepKinase.test(sequence)){
 	 		chosenKinaseType=document.outputPanel[9].value = "CMGC group";
		}
		if(document.outputPanel[9].value ==""){
			chosenKinaseType=document.outputPanel[9].value = "serine/threonine";
		}
		
		if((sequence.charAt(motifPositions[3])=="W") && sequence.charAt(motifPositions[5]-1)=="G"){
			chosenKinaseType=document.outputPanel[9].value = "serine/threonine";
		}
 	 	if((document.outputPanel.txtKinaseType.value == "tyrosine")||(chosenKinaseType == "tyrosine")){
 			for (i=3; i<9; i++){document.outputPanel[i].value = "";}
 			alert("This sequence appears to be for a tyrosine kinase. This program does not yet support predictions for tyrosine kinases.");

 			return; 
 		}	 
  }
	
//--------------------------------------------------------------------	
			
	var keyResiduesStr = findKeyResidues(sequence, motifPositions)	
	var output = "";		
	output = findKinaseSubstrate(keyResiduesStr,chosenKinaseType);
	document.outputPanel.txtSubstrate.value = output;	
	return;
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------

//SEQUENCE DATA TO UPPERCASE, STRIP NUMERALS/WHITE SPACES, EXCISE KINASE CATALYSIS DOMAIN
 
function validateInputSequence(){
	var upperSequence = "";
	var strippedSequence = "";
	var excisedSequence = "";
	var formattedSequence = "";
  									//*******UPPER CASE AND REMOVE UNWANTED CHARACTERS******
	upperSequence = document.outputPanel.clientSequence.value.toUpperCase();
	
	if (upperSequence == ""){return ("");}  
												
  	strippedSequence = stripper(upperSequence);

	var reFindRDLmotif = /HRDIKPTN|HRDIKGGN|HGDIKPHN|HCDIKPHN|HRDLKSIN|HRDVKGSN|HRDLKSNN|YRNLKPES|HGDIKLEN|HRDITPSN|HGDLKPSN|HCDLKPKN|HRDVKPEN|HRDMKADN|HHDLKPEN|HGDLTSSN|HRDVKPAN|HRDVKPGN|HRDVKPEN|HRDVKAEN|HRDIKHMN|HRDMKPDN|HRDVKADN|HRDVKSAN|HRDLKTRN|HRDMKSRN|HRDIKSTN|HLDVKPTN|HRDIKPLN|YRDLKSEN|HGDIKLEN|HRDLRPKN|HRDLKCEN|HFDLKPQN|HRDLKTAN|HRDIKCEN|HRDIKAEN|HGDLKSFN|HRDLKSDN|HADIKPGN|HKDIKPGN|HRDLTSKN|HRDLKSTN|HRDLKPTN|YRDFKPEN|HMDIKPGN|HRDIKGDN|HRDIKSDN|HRDLKPCN|HRDIKPGN|HADIKPDN|HRDIKAGN|HRDVKAGN|HRLPGSDN|HLDIKPEN|HRDLKCDN|HRDIKTLN|HRDLKTSN|HLDIKPSN|HLDLKPQN|HHDLKTQN|HRDIKLKN|HRDIKGQN|HRDFKDEN|HFDIRPEN|HGDVKAAN|HGDIKASN|HGDVKADN|HKDLKSKN|HLDVKPAN|HRDLTLSN|HTDIKPEN|HQDVKPEN|HYNIRPSS|HLDIKPAN|HRDLKPVN|HHDIKPAN|HRDIKPAN|HRDLKAAN|HQDLKPEN|HGDIKTAN|HCDIKPEN|HGDIKADN|HGDIKSEN|HRDLKQTN|YRDVKPEN|HRDIKIEN|HCDLKPEN|HRDIKLDN|HSNVKSSN|HGDIKSSN|HADLKPEN|HRDLKPMN|HRDLKVEN|HFDLKPEN|HRDIKSSN|HRDVKSNN|HRDMKAAN|HRDLKPHN|HRDIKGSN|HRDLKPPN|HRDVRPAC|HGDLKADN|HGDIKPDN|HGDLSPRC|HRDLKAGN|DRDVKPHN|HCDLKPEN|HCDLKPEN|HCDVKPEN|HFDIRPEN|HGDIKPAN|HGDIKTEN|HGDLSPRS|HGDLKPDN|HGNIRSKN|HHDIKPSN|HKDLAARN|HKDLAARN|HKDLATRN|HLDLKPAN|HLDLKPAN|HLDLKPEN|HLDVKPSN|HMDIKPSN|HNDIKPGN|HRDFKSKN|HRDFKSRN|HRDIAARN|HRDIAARN|HRDIHPNN|HRDIKAAN|HRDIKCSN|HRDIKDEN|HRDIKGAN|HRDIKPDN|HRDIKPDN|HRDIKPDN|HRDIKPEN|HRDIKPHN|HRDIKPQN|HRDIKPQN|HRDIKPSN|HRDIKPSN|HRDIKPSN|HRDIKPTN|HRDIKSAN|HRDIKSDN|HRDIKSKN|HRDIKSKN|HRDIKSQN|HRDIKTAN|HRDIRGDN|HRDLAARN|HRDLAARN|HRDLAARN|HRDLAARN|HRDLACRN|HRDLALRN|HRDLATRN|HRDLATRN|HRDLATRN|HRDLATRN|HRDLKAEN|HRDLKASN|HRDLKIEN|HRDLKLDN|HRDLKLDN|HRDLKLEN|HRDLKLEN|HRDLKLGN|HRDLKLGN|HRDLKLGN|HRDLKMEN|HRDLKPAN|HRDLKPDN|HRDLKPDN|HRDLKPEN|HRDLKPEN|HRDLKPEN|HRDLKPEN|HRDLKPGN|HRDLKPGN|HRDLKPKN|HRDLKPLN|HRDLKPNN|HRDLKPQN|HRDLKPQN|HRDLKPQN|HRDLKPQN|HRDLKPRN|HRDLKPSN|HRDLKPSN|HRDLKPSN|HRDLKPSN|HRDLKSKN|HRDLKSMN|HRDLKSNN|HRDLKSPN|HRDLKSSN|HRDLKTNN|HRDLKTSN|HRDLKVSN|HRDLKVSN|HRDLRAAN|HRDLRAAN|HRDLRADN|HRDLRSAN|HRDLSSQN|HRDLSSRN|HRDLTSQN|HRDMKADN|HRDMKPEN|HRDMKPNN|HRDMKPQN|HRDMKSNN|HRDVAARN|HRDVKGAN|HRDVKGSN|HRDVKPDN|HRDVKPEN|HRDVKPEN|HRDVKPHN|HRDVKPQN|HRDVKPSN|HRDVKPSN|HRDVKPTN|HRDVKPTN|HRDVKSIN|HREFKSKN|HRNLAARN|HSDIKPDN|HSDLKPAN|HTDLKPEN|HTDLKPEN|HYDLKPGN|YRDCKPEN|YRDFKASN|YRDFKTSN|YRDIKLEN|YRDIKPDN|YRDLKLDN|YRDLKLDN|YRDLKLEN|YRDLKLEN|YRDLKPAN|YRDLKPEN/;	
	if (!reFindRDLmotif.test(strippedSequence)){
reFindRDLmotif = /HRDLKPEN|HRDVKPSN|HRDLKPSN|HYDLKPGN|HRDLKPSN|HRDLKAGN|HRDLKAGN|HRDIKPEN|HRDLKSIN|HRDVKGSN|HRDLKCDN|HADLKPRN|HCDLKPEN|HRDIKPQN|HRDLKPHN|HRDVKPGN|HRDLKPDN|HRNISSSS|HRDISSSS|HRDLKSDN|HRDLKSDN|HCDVSPDN|HCDVSPDN|HRDLKPQN|YRGLKPHN|YRDLKPHN|HRDVKPSN|HRDIKPGN|HRDLNSHN|HGDLSPRC|HRDLKLEN|HRDIDLSN|HRDISLSN|HRDLKPKN|HRDIKPAN|HRDLKSDN|HRDLKPQN|HRDLKSDN|HRDLKPSN|HADLKPKN|HRDLRPSN|HADLKPRN|HRDVKAAN|HRDMKSSN|HSDISPSN|HHDIKPSN|HGDIKPSN|HRDIKPAN|HRDIKPSN|NRDIKLEN|HGNVCLAS|HLNSHHVM|HRDLKSNN|HRDMKSNN|HRDIKAEN|HRDIKMEN|HRDIKMEN|HLDLKPEN|HRDMKSLN|HFDINTNN|HRDIKMEN|HRDMKSLN|HRDIKPQN|HRDLSPAN|HLDISPQN|HLDSIPEN|HRDIKPEN|PINLKPTN|HRDVKPHN|HRDVKPHN|HRDLKSAN|HRDLKCEN|HRDLKPTN|HCDIKPAN|HRDLKLEN|HRDLKLSN|HRDIKAEN|YRDLKPEN|HRDIKPSN|HTDLKPEN|HRDIKPTN|HCDIKSSN|HRDVKPSN|HRDIKLEN|HSDIKPEN|LRDISLEN|HRDLKPQN|HDRIKPAN|HRDIKIAN|HRDLKCNN|HRDFTPEN|YRDLKPDN|HRDLKPQN|HRDLKMEN|HRDIKLEN|NGDIKTSN|HGDLKSTN|HRDIKAEN|HRDIKLDN|HCDVKPQN|HLDISPEN|HRDIKPEN|HRDVKPHN|HKDLKPEN|HCDLKPAN|HLDISPEN|HCDLKSSN|HRDIKMEN|HADLKPDN|HADLKPDN|HRDFTPEN|LTDIKLQN|HSDIKPSN|HKDLKHTN|HKDLKHTN|LTDIKLQN|HLDISPEN|HRDFTPEN|HLDFTPEN|HCDIKPQN|HLDFTPEN|HCDIKPQN|HRDLKSDN|HCDIKPQN|HRDLKPDN|HRDLKPDN|HRDIKPEN|HSDLALRN|HLNIQPRA|HCDPHGGN|HRDLKLEN|HCDVSPDN|HRDVNPAN|HRDVKPLN|HRDIKSSN|HRDVKSNN|HRDIKASN|YRDLKPEN|HRDVKTTN|HGDLTTSN|HRDLKTEN|HRDLKPVN|HRDLKTEN|HGDLTTSN|HGDLTTSN|HRDMKSSN|HRDIKPEN|HSDISPSN/;
		}
	if (! reFindRDLmotif.test(strippedSequence)){
  		return ("RDL not found");
  	} 
  	
	var RDLmotifAt = reFindRDLmotif.exec(strippedSequence).index +4;
	for (i = (RDLmotifAt - 271);i<= (RDLmotifAt + 140);i++){
  		excisedSequence = excisedSequence + strippedSequence.charAt(i);
  		
  	}
							//*******OUTPUT A FORMATTED SEQUENCE TO THE DATA TEXT AREA******
	i = 0;
	var j = 0;
	while (i<= excisedSequence.length){
		formattedSequence = formattedSequence + excisedSequence.charAt(i);
		j++;
		if (j%10 == 0){
			formattedSequence = formattedSequence + " ";
		}
		i++;
	}
	document.outputPanel.clientSequence.value = formattedSequence;
	
	return (excisedSequence); 
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//*******FIND CONSERVED KINASE MOTIFS (DFG APE GXG RDL) OR THE HOMOLOGS****
			
function findKinaseMotifs(validSequence){ 

	var motifNotFound = 0;
	var reGXG = /([LIVAMF]G[^P.]G[^P.].[^Q^R^E^W^H.][^P.][VCTLAI][^P.])|([LIVAK][SEQATNDR][^P.]G[^P.][FYIMTSNQGE][^K^Q^N^R.][^P.][V])/;
	var reGEL = /GTLREL|KSLDFH|GALDSI|GEMYKQ|GSVQQL|GLNEAL|GPLQNI|GDCGTL|GTLVNE|GDLQYY|HELKMI|GDLRKV|GEFFTF|GPLLSR|GDLMYQ|GSLSDI|GTLLEY|GSLKDI|GEIFDH|GTLAEA|DLHEVI|DMYKLL|DLKNLL|GDLMMH|DLQKVY|GDLYEK|NLHEVI|NLFELI|GDMLPY|GEWSQS|RSLMEL|GSLCDV|DLFNLI|GELFDE|GLHPDN|GQVVNQ|GDMFDY|ALLRFS|ANLNSI|APLSAW|CALDSF|CNLYQL|DDLKKY|DFFAVV|DFFNLV|DFRALY|DKSIIL|DLAAII|DLAEVV|DLAGLL|DLANVL|DLASLL|DLASVL|DLEAVI|DLESYL|DLEVII|DLEVVI|DLFAIV|DLFSLV|DLFTSI|DLHHII|DLHKII|DLHQII|DLHRLI|DLHRLL|DLHRVI|DLHRYL|DLHSMV|DLIGLL|DLKKAL|DLKKFI|DLKKFM|DLKKHM|DLKKLL|DLKKLM|DLKKYF|DLKKYL|DLKKYM|DLKQYL|DLKQYM|DLKRFM|DLKRYM|DLKSLM|DLKTLL|DLKTYL|DLLQII|DLMGLL|DLNSWL|DLQGML|DLQKVI|DLRTYL|DLSGLL|DLSGML|DLSGVL|DLTGVL|DLTTYL|DLVGLL|DLWHII|DLYELI|DLYKLL|DLYQFM|DLYRVI|GDMHQI|GDMHQI|GDMHRA|GDMHRV|GDMLEM|DVKKYL|EEFRTF|ESLYDV|FPFEEM|GAGSIT|GAGSVT|GALDAF|GALDKF|GALDRY|GALDSF|GALLDY|GALTDI|GALTDV|GATDVT|GAVDAV|GCIDLF|GCLLDF|GCLLDH|GCLLDY|GCLLEY|GCLLNF|GCLLNY|GCLSDY|GDCATL|GDCETL|GDCGSL|GDFLGL|GDFLTF|GDFRTF|GDFRTL|GDIRYH|GDLADY|GDLANL|GDLFDA|GDLFDK|GDLFFH|GDLFKQ|GDLFKR|GDLFLN|GDLFSV|GDLFSY|GDLFTR|GDLFTY|GDLFVN|GDLHAF|GDLHAL|GDLHEF|GDLHSF|GDLHSL|GDLHTL|GDLHYH|GDLIFQ|GDLILH|GDLKFH|GDLKQF|GDLKSF|GDLKSH|GDLKSY|GDLLAA|GDLLAL|GDLLDY|GDLLNF|GDLLNY|GDLLQF|GDLLSL|GDLLSY|GDLLTL|GDLMDF|GDLMFH|GDLMFH|GDLMFQ|GDLMHH|GDLMLH|GDLMMQ|GDLMTM|GDLMVH|GDLMWH|GDLMYH|GDLMYH|GDLMYR|GDLNEY|GDLNKF|GDLNQF|GDLNRF|GDLRHF|GDLRKL|GDLRKY|GDLRNF|GDLRYH|GDLSFF|GDLSLF|GDLSMV|GDLSQM|GDLSRF|GDLSYF|GDLTFL|GDLVDY|GDLVNL|GDLVNY|GDLYDF|GDLYEC|GDLYHY|GDLYSL|GDLYTL|GDMHYH|GDMKSF|GDMMSL|GDMMTL|GDVFTR|GEFFRA|GEFYKY|GEIFDQ|GEIFSL|GEIFSY|GEIWTM|GELESY|GELFDC|GELFDF|GELFDK|GELFDR|GELFDY|GELFED|GELFEK|GELFEQ|GELFER|GELFEY|GELFFH|GELFHH|GELFHL|GELFHQ|GELFHR|GELFHY|GELFML|GELFMQ|GELFNL|GELFQI|GELFQR|GELFSH|GELFSK|GELFSL|GELFSR|GELFSY|GELFTH|GELFTL|GELFTY|GELFTY|GELFWH|GELFYH|GELLDK|GELLDR|GELLDY|GELLHG|GELLKY|GELLQY|GELLSL|GELQWK|GELRSF|GELSIT|GELWSI|GELWTI|GELYDW|GELYDY|GELYKE|GELYQH|GEMFSH|GEMFSR|GEMFTH|GEMNRY|GEMYKL|GETDLA|GEVFDY|GEVFTH|GEVPWT|GFLPNG|GFSNYG|GHLDRI|GIDLFD|GKNTFE|GKVFDY|GLDLF|GLIDFL|GLIDFM/;
	if (!reGEL.test(validSequence)){
reGEL = /FSLKSL|DQVIAV|GAVDAV|GAVDAI|GALSRV|GHLFFQ|NDLSGL|SSLRDS|GSLRVY|GPLSRA|KSLQDL|GEMSDR|RSLADS|GTLHSI|GSLQDS|TLSSEI|GTLYDL|SLYHFN|GEDLPG|GETGSI|DLSQII|GPVKWC|GSLA[AS]L|GSCSDL|DLAKVI|DMHQII|GCLTDI|GEIFDR|KDLFQL|GLRDLF|GSLRSL|GNLEDC|GDLFTL|GEIFGE|GDFLSL|GEVKWC|HDLSQI|GDLYEA|GDLYGM|VTLRDI|GNLDGF|GTSLRA|GEPLNS|GTLEEV|GSVKDQ|GDLYYH|GELFNV|GDLASV|CDLYSY|GEFFSK|GENLAN|GELFDD|DLKKFL|GDLGES|GDLCTL|GSLNHF|GSLYGF|GSLYSF|GEMFDY|QSLQRI|GDLYDY|GDNLLK|GDLTSN|GTLAQI|GSLSSF|ETLYNR|GLDALL|GLQEMI|GSLADH|GDLASN|DLQKIM|GDLKSL|GTLESL|GDLLSH|GDCDLN|GPLTDV|GDVRKR|GTLFNA|GNLSAF|GDVWTV|GTLLDY|GSLLDI|GSLHDY|GSLVDC|GELYNH|GDIVSL|GELQTI|MDLWTF|DLHNVI|GSLNRI|GDLAQI|GEIFDY|GEVLRI|GSLIGV|ADLNNI|GSILEI|GELWTT|GQLCTV|GDSTLH|GELFKH|DLKKLF|DLEHVI|GSLEQL|GDNLKV|ASLNDY|GELLQR|GELFMH|GDLMSL|DLSDLI|DLHRII|GSLADI|GSLSDL|GLDHRN|GELFNY|GSLFEY|GDLLRK|GELFDH|GEMYDR|ETVYRV|YTLRKW|GMLYKE|GNDLDF|GNESFD|GNLDEQ|GNLKDF|GNLKLF|GNLKRH|GNLLDF|GNLLDY|GNLLEY|GNLMHK|GNLQEY|GNLQNF|GNLREF|GNLREY|GNLSNF|GNLSNY|GNLSTY|GNLVNF|GNLYDK|GPLHKF|GPLNKY|GPLNRV|GPLSRA|GPVMEV|GQLLDY|GQLLEY|GQLVEF|GQLYEV|GQMLDY|GQVVNL|GRLLDY|GSASDL|GSCLDL|GSFDIY|GSILAH|GSILDL|GSILSH|GSISSL|GSIVAL|GSLADA|GSLADL|GSLANI|GSLCDY|GSLCHY|GSLCKY|GSLCKY|GSLDAF|GSLDAI|GSLDKI|GSLDKI|GSLDLI|GSLDQV|GSLDRF|GSLDRL|GSLDRV|GSLDSF|GSLDSF|GSLDSI|GSLDTF|GSLDVF|GSLDVY|GSLEAR|GSLEDR|GSLEKL|GSLENH|GSLFDH|GSLFDY|GSLGQL|GSLHDF|GSLHSI|GSLKEY|GSLLDF|GSLLDF|GSLLDH|GSLLDR|GSLLDY|GSLLEY|GSLLNY|GSLMEL|GSLNEL|GSLQAA|GSLQDR|GSLQNF|GSLRAY|GSLRDY|GSLRGF|GSLRQF|GSLRRL|GSLSDF|GSLTDI|GSLTDV|GSLTDY|GSLTEI|GSLTLY|GSLVDF|GSLVDY|GSLYDF|GSLYDY|GSLYNI|GSLYNV|GSLYQH|GSLYRL|GSMDKL|GSMLEY|GSVAGL|GSVAHL|GSVGSL|GSVLEK|GSVQKM|GSVQTM|GSVRTL|GSVSGL|GSVSSM|GTAVDM|GTLEDV|GTLEQW|GTLFDH|GTLKTY|GTLSRH|GTVLDL|GTVYRE|GVVMKV|HLLKWI|IDCGDI|IDFRTL|IDLQKI|INLYKN|ISLHDL|KDLDAV|KDLFHH|KELYDH|KSLEAT|KSLLDY|LDIFER|LSLDSH|LSLDSY|LSLYEL|NELFDY|NIYELI|NLCQVI|NLFDVI|NLFQLF|NLLSLI|NLQDLV|NLRDIL|NLREVL|NLSDLI|NLYDFL|NLYDLL|NLYDRI|NLYDRL|NLYELI|NLYELL|NLYELM|NLYHIM|NLYQLI|NLYQLM|NLYQMM|NMLELL|PSLEDL|PSLQQH|QDLFDF|QDLFDY|QEMFSH|RDLYTG|RELLCG|RSLDAI|RSLLEL|RSMAHI|RSMMEL|RTLADS|RTLHSF|RTLYDL|SDFKQL|SDLCFE|SDLEMI|SDLQKI|SIYDFM|SLDKFY|SLEEIV|SLFDFL|SLWDWI|SLYDFL|SLYHHV|SLYQRL|SPEICG|SSLFEF|SSLYKH|SSLYRH|STFDFL|STLQNL|STLRDT|STYDFI|SVFDFL|TDFKHL|TDFKHL|TDFKQL|TDFKTL|TDFKVL|TDFRQY|ETILDD|ETILDD|ETLQIE|ETVFDD|ETVHRV|ETVLDE|ETVLHE|ETVYKV|ETVYRV|ETVYRV|VDFKVL|VDFRIL|VDFRTL|VECGDL|VFLKSY|VLSDVM|VTLHQV|YDLFTF/;
		}
	if (!reGEL.test(validSequence)){
reGEL = /GELFDY|GSGSSA|GRGSFK|GIGGFG|GRNQEE|GRGAYG|GSGDTG|GEGTYG|GVGGFG|GDGAFG|GKGGMG|QRNQEE|GLTVYQ|GGDGAFG|GSGAYG|GRGGFG|GSGAQG|GEGTFS|VSVSEL|GDLKTY|GPLSRA|RSLQPE|GDMMTL|NDLGSL|GALSRV|GAVDAV|FSLKSL|RSFQPE|SSLRDS|GAVDAI|DLNNIV|GNDLDF|ANLCQV|SLSFQE|GTLRDI|ETVYRA|ENLLAL|ATLQEY|GSIQNI|KSLQDL|GDLNQY|GTLREL|CTLRQY|CTLRQY|CNLLQL|CNLLQL|TDLAQY|GSLDRL|GSLDRL|GTCAEK|GSLYTV|GTLRGI|FTLQDE|GELKEI|GELHRY|TDLHQI|SDLHQV|FDLYRT|TDLQRT|SDLHHV|GNLESL|MSLYLL|ESLYRV|MSLYLL|TDLHQI|SELLVY|TDLQRI|SELLVY|GSVASC|GSLEDV|GSIEPL|GSVLEK|GSLADF|GSLADI|GSLEGA|GSLEGA|GSLADV|GTLESL|GSLESL|GSLADV|GSLHDA|GDMFEY|GSPVSI|SSLFSL|SSLYHH|SSLYKH|GDLKNY|GELFYK|YSLSKH|GSIYSI|YSLGRY|RELFDS|GDLKKL|GDLFTY|GDLYHY|DDLKKI|DLLKKI|DLLKKI|YSLSKH|GSIYSI|YSLGRY|RELFDS|RELFDS|GDLKKL|GDLFTY|GDLYHY|SFLNEN|YDLSKI|EDIYTY|CDLFQI|KELFNF|KCLFSY|IDFKTL|IDFKTL|GDLRTL|YDLWEF|GELMSR|GELYDF|GELWKE|IDLDKY|GDLKNY|GSLEKY|GELFYK|GELYDA|GDLISY|KTLREA|PSLYEI|GNLFEY|GNLLTY|GTLYDL|GTLFDI|DSILKF|STLLDY|GELFEQ|PNLLSL|GSVRNK|GELFDK|GDLFEV|QTVHKY|RKFYPE|FDLSGY|HELKMI|GDLGKV|GDIKNY|LDLHTI|YSLEKL|GEFFTF|GDLSRN|GELFEY|GELFFH|GNLLNI|GNLFNF|YTLPKN|FGLASY|GDLHSD|TDIKLQ|SDLYNY|GTLYSY|GELFYK|IDLVDY|GSINDV|GDLFQI|KELFNF|GTLWKE|GDLFQI|GNLRIA|GNLRIA|NMLELL|NMLELL|ENLYQM|DDIKNY|TSLEKL|STLENY|YVYPQY|NKINNR|FDYIYE|CSLYKL|CSLYKL|SRLYSP|TVLHEL|ADLHRY|MTLLDY|ETLYKV|DTLYNR|GNLRIA|QDLFQY|GSLYPE|GTLYSY|GTLYSY|GTLYSY|GTLYSY|GTLYSY|CTLRQY|ENVKEY|SDLYNY|GTLYSY|GDLMDF|GDLMDF|VSLNEI|GDLKAY|SSLETV|KRLDDL|GELFGR|GNLLQL|GDLFDL|IDATQH|GSLHNF|GSLHDI|GHLKWE|GSLGEW|GELWTI|GDLKYH|GDLKYH|LPLDRL|GSVSSI|GDLKFH|GDLREH|GSVTVR|GEMFDY|GVFSQS|GEMFDY|GSVTVR|GSVTVR|GSLEEV|SLYELI|MSLYEL|GSIEPL|GRLWLA|GEMFSH|GRQLYR/;
		}
	var reRDL = /HRDIKPTN|HRDIKGGN|HGDIKPHN|HCDIKPHN|HRDLKSIN|HRDVKGSN|HRDLKSNN|YRNLKPES|HGDIKLEN|HRDITPSN|HGDLKPSN|HCDLKPKN|HRDVKPEN|HRDMKADN|HHDLKPEN|HGDLTSSN|HRDVKPAN|HRDVKPGN|HRDVKPEN|HRDVKAEN|HRDIKHMN|HRDMKPDN|HRDVKADN|HRDVKSAN|HRDLKTRN|HRDMKSRN|HRDIKSTN|HLDVKPTN|HRDIKPLN|YRDLKSEN|HGDIKLEN|HRDLRPKN|HRDLKCEN|HFDLKPQN|HRDLKTAN|HRDIKCEN|HRDIKAEN|HGDLKSFN|HRDLKSDN|HADIKPGN|HKDIKPGN|HRDLTSKN|HRDLKSTN|HRDLKPTN|YRDFKPEN|HMDIKPGN|HRDIKGDN|HRDIKSDN|HRDLKPCN|HRDIKPGN|HADIKPDN|HRDIKAGN|HRDVKAGN|HRLPGSDN|HLDIKPEN|HRDLKCDN|HRDIKTLN|HRDLKTSN|HLDIKPSN|HLDLKPQN|HHDLKTQN|HRDIKLKN|HRDIKGQN|HRDFKDEN|HFDIRPEN|HGDVKAAN|HGDIKASN|HGDVKADN|HKDLKSKN|HLDVKPAN|HRDLTLSN|HTDIKPEN|HQDVKPEN|HYNIRPSS|HLDIKPAN|HRDLKPVN|HHDIKPAN|HRDIKPAN|HRDLKAAN|HQDLKPEN|HGDIKTAN|HCDIKPEN|HGDIKADN|HGDIKSEN|HRDLKQTN|YRDVKPEN|HRDIKIEN|HCDLKPEN|HRDIKLDN|HSNVKSSN|HGDIKSSN|HADLKPEN|HRDLKPMN|HRDLKVEN|HFDLKPEN|HRDIKSSN|HRDVKSNN|HRDMKAAN|HRDLKPHN|HRDIKGSN|HRDLKPPN|HRDVRPAC|HGDLKADN|HGDIKPDN|HGDLSPRC|HRDLKAGN|DRDVKPHN|HCDLKPEN|HCDLKPEN|HCDVKPEN|HFDIRPEN|HGDIKPAN|HGDIKTEN|HGDLSPRS|HGDLKPDN|HGNIRSKN|HHDIKPSN|HKDLAARN|HKDLAARN|HKDLATRN|HLDLKPAN|HLDLKPAN|HLDLKPEN|HLDVKPSN|HMDIKPSN|HNDIKPGN|HRDFKSKN|HRDFKSRN|HRDIAARN|HRDIAARN|HRDIHPNN|HRDIKAAN|HRDIKCSN|HRDIKDEN|HRDIKGAN|HRDIKPDN|HRDIKPDN|HRDIKPDN|HRDIKPEN|HRDIKPHN|HRDIKPQN|HRDIKPQN|HRDIKPSN|HRDIKPSN|HRDIKPSN|HRDIKPTN|HRDIKSAN|HRDIKSDN|HRDIKSKN|HRDIKSKN|HRDIKSQN|HRDIKTAN|HRDIRGDN|HRDLAARN|HRDLAARN|HRDLAARN|HRDLAARN|HRDLACRN|HRDLALRN|HRDLATRN|HRDLATRN|HRDLATRN|HRDLATRN|HRDLKAEN|HRDLKASN|HRDLKIEN|HRDLKLDN|HRDLKLDN|HRDLKLEN|HRDLKLEN|HRDLKLGN|HRDLKLGN|HRDLKLGN|HRDLKMEN|HRDLKPAN|HRDLKPDN|HRDLKPDN|HRDLKPEN|HRDLKPEN|HRDLKPEN|HRDLKPEN|HRDLKPGN|HRDLKPGN|HRDLKPKN|HRDLKPLN|HRDLKPNN|HRDLKPQN|HRDLKPQN|HRDLKPQN|HRDLKPQN|HRDLKPRN|HRDLKPSN|HRDLKPSN|HRDLKPSN|HRDLKPSN|HRDLKSKN|HRDLKSMN|HRDLKSNN|HRDLKSPN|HRDLKSSN|HRDLKTNN|HRDLKTSN|HRDLKVSN|HRDLKVSN|HRDLRAAN|HRDLRAAN|HRDLRADN|HRDLRSAN|HRDLSSQN|HRDLSSRN|HRDLTSQN|HRDMKADN|HRDMKPEN|HRDMKPNN|HRDMKPQN|HRDMKSNN|HRDVAARN|HRDVKGAN|HRDVKGSN|HRDVKPDN|HRDVKPEN|HRDVKPEN|HRDVKPHN|HRDVKPQN|HRDVKPSN|HRDVKPSN|HRDVKPTN|HRDVKPTN|HRDVKSIN|HREFKSKN|HRNLAARN|HSDIKPDN|HSDLKPAN|HTDLKPEN|HTDLKPEN|HYDLKPGN|YRDCKPEN|YRDFKASN|YRDFKTSN|YRDIKLEN|YRDIKPDN|YRDLKLDN|YRDLKLDN|YRDLKLEN|YRDLKLEN|YRDLKPAN|YRDLKPEN/;	
	if (!reRDL.test(validSequence)){
reRDL = /HRDLKPEN|HRDVKPSN|HRDLKPSN|HYDLKPGN|HRDLKAGN|HLDIKPEN|HRDIKPEN|HRDLKPDN|HRDLKAGN|HRDLKSIN|HRDVKGSN|HRDLKSSN|HRDLKCDN|HADLKPRN|HCDLKPEN|HRDIKPQN|HRDLKPHN|HRDVKPGN|HRDLKPDN|HRNISSSS|HRDISSSS|HRDLKSDN|HRDLKSDN|HCDVSPDN|HCDVSPDN|HRDLKPQN|YRGLKPHN|YRDLKPHN|HRDVKPSN|HRDIKPGN|HRDLNSHN|HGDLSPRC|HRDLKLEN|HRDIDLSN|HRDISLSN|HRDLKPKN|HRDIKPAN|HRDLKSDN|HRDLKPQN|HRDLKSDN|HRDLKPSN|HADLKPKN|HRDLRPSN|HADLKPRN|HRDVKAAN|HRDMKSSN|HSDISPSN|HHDIKPSN|HGDIKPSN|HRDIKPAN|HRDIKPSN|NRDIKLEN|HGNVCLAS|HLNSHHVM|HRDLKSNN|HRDMKSNN|HRDIKAEN|HRDIKMEN|HRDIKMEN|HLDLKPEN|HRDMKSLN|HFDINTNN|HRDIKMEN|HRDMKSLN|HRDIKPQN|HRDLSPAN|HLDISPQN|HLDSIPEN|HRDIKPEN|PINLKPTN|HRDVKPHN|HRDVKPHN|HRDLKSAN|HRDLKCEN|HRDLKPTN|HCDIKPAN|HRDLKLEN|HRDLKLSN|HRDIKAEN|YRDLKPEN|HRDIKPSN|HTDLKPEN|HRDIKPTN|HCDIKSSN|HRDVKPSN|HRDIKLEN|HSDIKPEN|LRDISLEN|HRDLKPQN|HDRIKPAN|HRDIKIAN|HRDLKCNN|HRDFTPEN|YRDLKPDN|HRDLKPQN|HRDLKMEN|HRDIKLEN|NGDIKTSN|HGDLKSTN|HRDIKAEN|HRDIKLDN|HCDVKPQN|HLDISPEN|HRDIKPEN|HRDVKPHN|HKDLKPEN|HCDLKPAN|HLDISPEN|HCDLKSSN|HRDIKMEN|HADLKPDN|HADLKPDN|HRDFTPEN|LTDIKLQN|HSDIKPSN|HKDLKHTN|HKDLKHTN|LTDIKLQN|HLDISPEN|HRDFTPEN|HLDFTPEN|HCDIKPQN|HLDFTPEN|HCDIKPQN|HRDLKSDN|HCDIKPQN|HRDLKPDN|HRDLKPDN|HRDIKPEN|HSDLALRN|HLNIQPRA|HCDPHGGN|HRDLKLEN|HCDVSPDN|HRDVNPAN|HRDVKPLN|HRDIKSSN|HRDVKSNN|HRDIKASN|YRDLKPEN|HRDVKTTN|HGDLTTSN|HRDLKTEN|HRDLKPVN|HRDLKTEN|HGDLTTSN|HGDLTTSN|HRDMKSSN|HRDIKPEN|HSDISPSN/;
		}	
	var reDFG = /ADFGF|GDFGV|GDLGS|CNFGL|VDFGT|VDFGA|GDFGV|GDLGE|TDWGL|MDFGI|VDFGI|GDFGA|GDYGL|ADMGL|CDFGE|ADYGI|VDLGS|IDFGF|IDFGC|ADFGN|IDFGV|GDFGW|ADFGE|CDFGC|FDFGL|CDFGM|VDWGT|GDLGM|TDFNI|ADFGA|ADFGF|ADFGI|ADFGL|ADFGM|ADFGS|ADFGT|ADFGV|ADFGW|ADFNV|ADLGL|ADLGN|ADMGF|ADWGH|ADYGL|CDFDL|CDFGA|CDFGF|CDFGF|CDFGH|CDFGI|CDFGL|CDFGS|CDFGT|CDFGV|CDFGY|CDLGL|CDLGS|CGFSF|FDFYL|GDFGC|GDFGF|GDFGI|GDFGL|GDFGM|GDFGS[^Q]|GDLGH|GDLGL|GEFGL|GEFGM|HDFGL|IDFGA|IDFGI|IDFGL|IDFGM|IDFGR|IDFGS|IDFGT|IDLED|IDLGL|IDLGQ|IDLGY|IDWGL|IEFGQ|LDFGI|LDFGL|MDFGL|MDFSY|SALSL|SDFDL|SDFEL|SDFGC|SDFGF|SDFGI|SDFGL|SDFGL|SDFGL|SDFGM|SDFGM|SDFGS|SDFGT|SDFGV|SDFGW|SDFSI|SDFSS|SDLGL|SYPAL|TDFAA|TDFAS|TDFDL|TDFGA|TDFGE|TDFGF|TDFGF|TDFGF|TDFGF|TDFGH|TDFGI|TDFGL|TDFGL|TDFGL|TDFGL|TDFGM|TDFGN|TDFGQ|TDFGS|TDFGT|TDFGW|TDLGF|TDNAL|TDYGM|TEFGL|VDFGF|VDFGF|VDFGL|VDFGL|VDFGM|VDFGS|VDFGV|VDYGL/;
	if (!reDFG.test(validSequence)){
reDFG = /VDFGA|IDFGL|GDLGL|YDFGL|VDFGL|DFDL|SDFGL|IDFGL|ADFGV|VDFGL|IDYGL|LDFGL|SDFGI|CDFGS|SDFGL|LDFGM|ADFGL|AGFEL|ADFGC|ADFGC|TDFGS|TDFGS|ADFGL|ADYGI|ADYGI|CDFGI|TDFGA|ADFGL|VDFSY|TDFGL|ADFGL|TDFGL|CDFGL|GDFGL|CDLGL|ADFGV|SDFGC|CDFGS|SDFGC|TDFGL|IDFGL|GDFGL|IDFGL|GDFGL|SDFGM|TDYGT|VDFGL|TDFGV|TDFGI|ADFGV|ADFGV|SDFGV|ADFGV|ADFGV|SDFGV|ADFGA|CDFGY|ADFDG|IDMGD|GDFGL|GDFGL|IDWGF|IDFGM|GDWGL|SDFGL|GDLGC|ADFGL|CDFGI|YDFGE|CDWGL|SDFGL|CDLGS|IDFGL|IDFGL|GDLGD|ADFGL|CDFGI|CDFNT|ADFGL|CDALK|CDLAK|IDYDT|SDFGI|IDWGL|IDWGL|GDFGL|IDFGS|IDFGL|TDFGL|ADFGW|SDFGL|ADFGL|IDFGM|IDFGA|GDFGA|IDFGC|ADFGL|IDFGL|IDFGS|CDFGL|SDFGE|IDMDM|VDFGL|CDLGN|IDFGL|NDPGQ|CDFGS|ADFGL|DDFGL|CDFGK|CDFGD|TDFNL|TDFGF|TDFGL|CDFCS|GDLGL|SDFGC|ADLGS|GDWGS|GDWGS|CDLAK|IDYDT|CDLAK|CDLGS|IDYDT|GDLGS|CDFGK|IDFEY|IDLVD|VDFDM|CDFGS|SDFGC|ADLGN|ADLGN|CDLAK|IDYDT|ADFGC|IDFNS|TDFGL|TDFGL|IDFGA|ADFGL|GDYGI|SGLGY|FDHGL|CDFGY|TDFGS|GDLGA|ADFGL|CDFGT|GDFDI|ADFGL|CDFGL|DDYGH|ADFGL|IDFGL|EDFGF|GDFGL|EDFGF|IDFGL|IDFGL|SDFGM|ADFGS|TDYGT/;
		}
	var reAPE = /YMPPEL|YTPPEL|YKAPEI|YMAPES|YVASEV|YTPPEV|FTAPDL|YIAPEE|FFAPEM|YIAPEQ|TNAPEV|YNAPEI|YVSPEM|FVTPEL|YMSPEA|YSPPEV|YLPPEI|YFSPEM|FQPPEI|YIAPER|YISPEA|WCAPEV|WMAPEL|YCSPEV|WMPPEV|LMAPEI|FRAPET|FKCIEM|FMAPEA|YMAPEF|YRAPDI|FQPPEC|WVSPEC|WIAPEV|FAAPEI|FAAPEV|FFAPEL|FIAPEL|FIPPEI|FKAPEL|FKGPEL|FLANEI|FLANEV|FLAPEV|FLAPEY|FLGPEL|FLPPEL|FLPVEI|FLSPEV|FMAPEI|FMAPEL|FMAPEM|FMAPER|FMAPES|FMAPEV|FQCPEM|FQCVEM|FRAPEV|FRPPEL|FRTAQI|FTSIDA|FTSLDA|FVAPEI|FVAPEV|HKGPEL|HMAPEL|HMAPEV|HRAPEL|IEMREG|KSAPEG|LITPER|NIAPER|WAPPEV|WASPEV|WCAPES|WCPPEV|WIAIES|WIAPEM|WKADQQ|WLAIEI|WLAIET|WLALEC|WLALES|WLAPEC|WLAPEI|WMAAEV|WMAIES|WMALEC|WMALES|WMAPEA|WMAPEI|WMAPEM|WMAPES|WMAPET|WMAPEV|WMAWEC|WMPPEA|WMPPEM|WMPPES|WMPSES|WMSPEA|WMSPEM|WMSPES|WMSPEV|WMSWES|WRAPEL|WRPPEL|WSPPEV|WTAPEA|WTAPEG|WTAPES|WTSPEA|WYAPEC|WYAPES|WYSPEA|YAAPEI|YAAPEL|YAAPEV|YAAPEY|YACPEV|YAPPEV|YASINA|YASINT|YASMNT|YASPEI|YASPEQ|YASVNT|YCAPEI|YCAPEL|YCAPEV|YFAAPE|YIAPEI|YIAPEL|YIAPER|YIAPEV|YIAPEW|YIAPEY|YIDPEY|YIGPEI|YISPEI|YISPEV|YKAPEL|YKAPEV|YKGPEL|YLAPEA|YLAPEI|YLAPEL|YLAPEM|YLAPER|YLAPET|YLAPEV|YLAPEY|YLDPEY|YLPEDF|YLPEEY|YLPPEC|YLPPEF|YLPPEM|YLPPEM|YLPPER|YLSPEI|YLSPEI|YLSPEM|YLSPEQ|YLSPEV|YLSPEV|YMALEV|YMAPDI|YMAPEA|YMAPEI|YMAPEI|YMAPEI|YMAPEI|YMAPEL|YMAPEL|YMAPEM|YMAPEQ|YMAPER|YMAPET|YMAPEV|YMAPEV|YMAPEV|YMAPEV|YMPPEA|YMPPER|YMPPEV|YMSINT|YMSPEC|YMSPEC|YMSPEI|YMSPEI|YMSPEL|YMSPEM|YMSPEQ|YMSPEQ|YMSPER|YMSPER|YMSPEV|YMSPEV|YMSPEY|YQPPEI|YRAIET|YRAPDV|YRAPEC|YRAPEI|YRAPEI|YRAPEI|YRAPEI|YRAPEI|YRAPEI|YRAPEL|YRAPEL|YRAPEL|YRAPEL|YRAPEM|YRAPET|YRAPEV|YRAPEV|YRAPEV|YRCPEM|YRPPDI|YRPPDV|YRPPEI|YRPPEL|YRPPEL|YRPPEV|YRSPDV|YRSPEI|YRSPEL|YRSPEM|YRSPEV|YRSPEV|YRSPRL|YRTPEI|YSAPEI|YSPPEW|YTAPEG|YTAPEI|YTAPEI|YTAPEV|YVAPEE|YVAPEI|YVAPEI|YVAPEI|YVAPEL|YVAPEV|YVAPEV|YVAPEV|YVAPQV|YVATEV|YVPPEI|YVSPEA|YVSPEI|YVSPEL|YVSPEV|YYAPEV/;
	if (!reAPE.test(validSequence)){
reAPE = /WRAPEI|KIPLSG|YRAPEV|YLPPEC|YRAPEI|WMAPEV|YMSPEQ|FIPPEC|YMAPES|WMAPEV|YRPPEL|YIAPEV|FMAPEM|YRAPEA|YMAPER|YRAPEL|WIAPEM|YAPISC|YMAPEV|YVSPER|YMAPEV|YMAPEV|RVPPKL|RVPPKL|YRPPDV|YRPPDA|FRAPEV|FRAPEV|YMAPER|YLHPDM|WMAPED|VQILEG|YMAPEV|YISPEV|YMAPEL|YRAPEL|YMSPER|LMAPEI|YRAPEL|LMAPEI|YRAPEL|YRAPEA|YRAPEL|YRAPEA|HIAPEY|YVPPEY|SKGRQL|YMSPEV|YLAPEV|YMAPEV|WMDPET|WMAPEV|WMAAEV|YLSPEL|YISPEL|YQPPES|YFSPEI|YRAPEL|YVAPQV|YRPLEV|YWSPEQ|YLSPEL|FSAPEL|YQPPES|YMAPEV|YRAPEL|YVAPEQ|YVAPEQ|WMAPES|YWSPEQ|YLSPEI|YRAPEL|YRAPEL|SMPPEC|YMRLKI|YIAPEF|YTPPEI|YKGPEL|YKGPEL|YADPYY|FIPPEA|YMAPEV|YVAPEV|INPPEV|IQPPEC|YIAPEI|YAAPEV|YISPEM|YMAPEV|YAAPEV|YISPEQ|YRAPEV|YLAPEI|YTSPEI|YISPEI|WTAPEV|FMPPEF|YMPPES|YIAPEV|YMPPEV|YVAPQV|FRPPEI|YRAPEL|YRPPEI|YRPPEL|FIPPEC|YAPPEL|HLAPEQ|YIAPEI|YWSPEL|YVAPEI|YRPPEL|YMAPET|YTAPEG|CLSYES|YISPEL|YMSPYC|FKPLED|YVSFDL|YIAPDV|YMRLKI|YMRLKI|YIAPEF|FIPPEA|YMRLKI|YRAPEI|YRAPEI|WTPPEI|YMPPEI|FIPPEC|YAAPEQ|YMAPEG|TMAPEG|YMAPET|FKPLED|YMSPYC|FIAPEL|TMAPEG|YRSIEV|YRSIEV|YRALEV|FIAPEL|YVAPEV|YVAPEV|FMAPEQ|WMAPES|WTAPEL|YTAPEI|NITDEQ|YIAPEV|RVPPKL|YPAPEL|WMAPEV|YHAPEY|YIAPEY|HLAPEY|YMAPEV|YLDPEY|SALPED|YAAPEV|YVSPEV|YAAPEV|SALPED|SALPED|YVPPEY|YRAPEC/;
		}
	var reAMK = /[AMVILCS][MISLVCAGRFW]K/;
		if (!reAMK.test(validSequence)){
reAMK = /AMK|AWC|ALK|AIK|AIK|ALK|AVK|TIK|VTK|AIK|CVK|CVK|ALK|AVK|VMK|VIK|AVK|AIK|TVK|ACK|AVK|VAK|AVK|VLK|VLK|VVK|VLK|AAK|VIK|IVK|AVK|AIK|CVK|CVK|ALK|AVK|AVK|AVK|ACK|SVK|LVK|AIK|AVK|AIK|VIK|FPK|AIK|TVK/;
		} 	
	//var reSDV = /ADVWSFGV|CDVWSYGI|SDIFAYGV|SDIWAFGV|SDIWSFGV|SDIWSYGV|SDMWSFGV|SDTWMFGV|SDVFSFGV|SDVWAFGV|SDVWAYGV|SDVWLFGV|SDVWMFGV|SDVWSFGI|SDVWSFGV|SDVWSLGV|SDVWSYGI|SDVWSYGV|TDSWSFGV|TDVWSYGV/;
	
	if (! reGXG.test(validSequence.slice(0,185))){
  		document.outputPanel.txtGXGfound.value = "not found";
  		motifNotFound = motifNotFound +1;
  	}  	
  	else {
  		var GXGindex = reGXG.exec(validSequence).index +2;
  		document.outputPanel.txtGXGfound.value = GXGindex;
  		
  	} 
	if (! reAMK.test(validSequence.slice((GXGindex+15),(GXGindex+42)))){
  		document.outputPanel.txtAMKfound.value = "not found";
  		motifNotFound = motifNotFound +1;
  	}  	
  	else {
  		var AMKindex = reAMK.exec(validSequence.slice((GXGindex+15),(GXGindex+42))).index + GXGindex +16;
  		document.outputPanel.txtAMKfound.value = AMKindex;
  	}
  	if (! reGEL.test(validSequence)){
  		document.outputPanel.txtGELfound.value = "not found";
  		motifNotFound = motifNotFound +1; 
  	}  	
  	else {
  		var GELindex = reGEL.exec(validSequence).index +1;
  		document.outputPanel.txtGELfound.value = GELindex;
  	} 
	
	if (!reRDL.test(validSequence)){
  		document.outputPanel.txtRDLfound.value = "not found";
  		motifNotFound = motifNotFound +1; 
  	}  	
  	else {
  		var RDLindex = reRDL.exec(validSequence).index +2;
  		document.outputPanel.txtRDLfound.value = RDLindex;
  	}
  	
  	if(GELindex > RDLindex){
  		document.outputPanel.txtGELfound.value = "not found";
  		motifNotFound = motifNotFound +1;
  	}

	if (! reDFG.test(validSequence)){
  		document.outputPanel.txtDFGfound.value = "not found";
  		motifNotFound = motifNotFound +1;
	}  	
  	else {
  		var DFGindex = reDFG.exec(validSequence).index +2;
  		document.outputPanel.txtDFGfound.value = DFGindex;
  		if(RDLindex > DFGindex){
  			if (! reDFG.test(validSequence.slice(RDLindex,RDLindex+50))){
  				document.outputPanel.txtDFGfound.value = "not found";
  				motifNotFound = motifNotFound +1;
			}
			else{
				var DFGindex = reDFG.exec(validSequence.slice(RDLindex,RDLindex+50)).index +2;
  				DFGindex = document.outputPanel.txtDFGfound.value = RDLindex + DFGindex;
			}  	
  		}

	} 

	if (! reAPE.test(validSequence)){
  		document.outputPanel.txtAPEfound.value = "not found";
  		motifNotFound = motifNotFound +1;
  	}  	
  	else {
  		var APEindex = reAPE.exec(validSequence).index +3;
  		document.outputPanel.txtAPEfound.value = APEindex;
  	} 

  	if (GXGindex>(RDLindex-50)){
  		document.outputPanel.txtGXGfound.value = "not found";
  		GXGindex=0;
  		motifNotFound = motifNotFound +1;
  	}
  	
  	if(GXGindex==null){
  		if (reAMK.test(validSequence.slice(0,70))){
  			var AMKindex = reAMK.exec(validSequence).index +1;
  			document.outputPanel.txtAMKfound.value = AMKindex;
  			if(GELindex-AMKindex > 80){document.outputPanel.txtAMKfound.value = "not found";}
  			if (reAMK.test(validSequence.slice(30,GELindex))){
  				document.outputPanel.txtAMKfound.value = reAMK.exec(validSequence.slice(30,GELindex)).index + 31;
			}
  		}  	
  		else {
  			document.outputPanel.txtAMKfound.value = "not found";
  		}
  	}
  	
  	if (AMKindex>(RDLindex-85)){
  		document.outputPanel.txtAMKfound.value = "not found";
  		AMKindex=0;
  		motifNotFound = motifNotFound +1;
  	}
  	
  	if (motifNotFound>0){return ("motifs not found");}

  	var indexArray = [GXGindex, AMKindex, GELindex, DFGindex, RDLindex, APEindex];
  	
  	for(var i = 0; i < 9; i++){
  		document.outputPanel.elements[i].value = document.outputPanel.elements[i].value;
  	}

  	return(indexArray);
} 
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------

function stripper(inputString){			//*******STRIP NUMERALS/WHITE SPACES********
	var i = 0;
	var outputString = "";
  	while (i<= inputString.length){ 
    	if ((inputString.charCodeAt(i) > 64) && (inputString.charCodeAt(i)< 91)){ 
     	 outputString = outputString + inputString.charAt(i); 
   	 	} 
  	i++; 
  	} 
	return (outputString);
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//*******FIND KEY BINDING RESIDUES********  
					
function findKeyResidues(validSequence,inputArray){
	
	GXGposn = inputArray[0];
	AMKposn = inputArray[1];
	GELposn = inputArray[2];
	DFGposn = inputArray[3];
	RDLposn = inputArray[4];
	APEposn = inputArray[5];	
		
	var GXGplus3 = validSequence.charAt(GXGposn + 2);
	var GXGplus3index = GXGposn + 3;
	var GXGplus4 = validSequence.charAt(GXGposn + 3);
	var GXGplus4index = GXGposn + 4;
  	var AMKplus11 = validSequence.charAt(AMKposn+10);	//AMK+11
	var AMKplus11index = AMKposn + 11;
  	var AMKplus12 = validSequence.charAt(AMKposn+11);	//AMK+12
  	var AMKplus12index = AMKposn + 12;
  	var AMKplus13 = validSequence.charAt(AMKposn+12);	//AMK+13
  	var AMKplus13index = AMKposn + 13;
  	var AMKplus14 = validSequence.charAt(AMKposn+13);	//AMK+14
  	var AMKplus14index = AMKposn + 14;
  	var AMKplus16 = validSequence.charAt(AMKposn+15);	//AMK+16
  	var AMKplus16index = AMKposn + 16;
  	
  		if (AMKposn==0){
  			AMKplus11="_";
  			AMKplus12="_";
  			AMKplus13="_";
  			AMKplus14="_";
  			AMKplus16="_";
  			AMKplus11index=0;
  			AMKplus12index=0;
  			AMKplus13index=0;
  			AMKplus14index=0;
  			AMKplus16index=0;
  			document.outputPanel.txtAMKfound.value = "not found";
  		}
  		
  	var GELminus1 = validSequence.charAt(GELposn -2);
  	var GELminus1index = GELposn -1;	
  	var GELplus0 = validSequence.charAt(GELposn-1);
  	var GELplus0index = GELposn + 0;		
  	var GELplus1 = validSequence.charAt(GELposn);
  	var GELplus1index = GELposn + 1;
  	var GELplus2 = validSequence.charAt(GELposn+1);
  	var GELplus2index = GELposn + 2;
  	var GELplus3 = validSequence.charAt(GELposn+2);
  	var GELplus3index = GELposn + 3;
  	var GELplus4 = validSequence.charAt(GELposn + 3);
  	var GELplus4index = GELposn + 4;
  	var GELplus7 = validSequence.charAt(GELposn + 6);
  	var GELplus7index = GELposn + 7;
  	var PENplus1 = validSequence.charAt(RDLposn + 4);
  	var PENplus1index = RDLposn + 5;  	
  	var DFGplus3 = validSequence.charAt(DFGposn + 2);
  	var DFGplus3index = DFGposn + 3;
  	var APEminus10 = validSequence.charAt(APEposn - 11);
  	var APEminus10index = APEposn - 10;
  	var APEminus9 = validSequence.charAt(APEposn - 10);
  	var APEminus9index = APEposn - 9;
  	var APEminus8 = validSequence.charAt(APEposn - 9);
  	var APEminus8index = APEposn - 8;
  	var APEminus7 = validSequence.charAt(APEposn - 8);
  	var APEminus7index = APEposn - 7;
  	var APEminus6 = validSequence.charAt(APEposn - 7);
  	var APEminus6index = APEposn - 6;
  	var APEminus5 = validSequence.charAt(APEposn - 6);
  	var APEminus5index = APEposn - 5;
  	var APEminus4 = validSequence.charAt(APEposn - 5);
  	var APEminus4index = APEposn - 4;
  	var APEminus3 = validSequence.charAt(APEposn - 4);
  	var APEminus3index = APEposn - 3; 	
  	var APEminus2 = validSequence.charAt(APEposn - 3);
  	var APEminus2index = APEposn - 2;
  	var APEminus1 = validSequence.charAt(APEposn - 2);
  	var APEminus1index = APEposn - 1;
  	var APEplus2 = validSequence.charAt(APEposn + 1);
  	var APEplus2index = APEposn + 2;
	var APEplus3 = validSequence.charAt(APEposn + 2);
  	var APEplus3index = APEposn + 3;
  	var APEplus4 = validSequence.charAt(APEposn + 3);
  	var APEplus4index = APEposn + 4;
  	
  	var Eminus5 = "_";
  	var Eminus6 = "_";
  	var Eminus7 = "_";
  	var Eminus5posn = 0;
  	var Eminus6posn = 0;
  	var Eminus7posn = 0;
  	var reKEloop = /E..[LIMVCFTNYAQ][ILMFCHGNAYTV]/;
 	var KEloop = 0;
 	var Estring = validSequence.slice(AMKposn+13,GELposn-28);
 	if (reKEloop.test(Estring)){
  		for(var i = 0; i <= 50; i++){
 			Estring = validSequence.slice(AMKposn+14+i,GELposn-28)
 			if(reKEloop.test(Estring)){
 				continue;
 			}
 			else{		
  				KEloop = i + 12;
				break;
  			}
 		}
 		
 		var loopEPosn =(AMKplus14index+i);
		Eminus5 = validSequence.charAt(loopEPosn-6);
		Eminus5posn = loopEPosn -6;
		Eminus6 = validSequence.charAt(loopEPosn-7);
		Eminus6posn = Eminus5posn -1;
 		Eminus7 = validSequence.charAt(loopEPosn-8);
		Eminus7posn = Eminus5posn -2;  	
	}
	var APEplus = "_";
	if(KEloop==0){KEloop = "00"}
  	
  	var reDQL = /[DENHSLA][QHE][LIMFWGAV]/;
  	  
 	var APEplus38str = validSequence.slice(APEposn+33,APEposn+48);
 	var nnn = APEplus38str;
 	if (reDQL.test(APEplus38str)){				//cyclin dependent kinases
  		for(var i = 0; i <= 20; i++){
 			APEplus38str = validSequence.slice(APEposn+33+i,APEposn+48)
 			if(!reDQL.test(APEplus38str)){
 				break;
 			}
 		}
 	APEplus = nnn.charAt(i-4);
 	}
	if(APEplus == ""){APEplus = "_";}

  	var APEplus24 = "_";
  	var APEplus24 = validSequence.slice((APEposn+11),(APEposn+30));
    var reAPEplus24 = /[WGFLYE][AGSTCVLM][LFYMVTCIA][GLAVS][VILCATYHM][LVMITFCSA][IVMLACSTFQ][LYFHASGMVITW]/;
    if (reAPEplus24.test(APEplus24)){
    	APEplus24 = APEplus24.charAt(reAPEplus24.exec(APEplus24).index+8);
    } 
    else{
    	APEplus24 = "_";
    }
    
    var keyResiduesStr = GXGplus3+GXGplus4+AMKplus11+AMKplus12+AMKplus13+AMKplus14+AMKplus16+GELminus1+GELplus0+GELplus1+GELplus2+GELplus3+GELplus4+
			DFGplus3+APEminus10+APEminus9+APEminus8+APEminus7+APEminus6+APEminus5+
			APEminus4+APEminus3+APEminus2+APEminus1+ APEplus2+APEplus3+APEplus4+APEplus24+PENplus1+Eminus7+Eminus6+Eminus5+APEplus+GELplus7+KEloop;

  	var determsList = 
  		"GXG+3="+GXGplus3+" ("+GXGplus3index+")"+"   "+
  		"GXG+4="+GXGplus4+" ("+GXGplus4index+")"+"   "+
   		"AMK+11="+AMKplus11+" ("+AMKplus11index+")"+"   "+		
   		"AMK+12="+AMKplus12+" ("+AMKplus12index+")"+"   "+"\n"+		
   		"AMK+13="+AMKplus13+" ("+AMKplus13index+")"+"   "+		
  		"AMK+14="+AMKplus14+" ("+AMKplus14index+")"+"   "+		
   		"AMK+16="+AMKplus16+" ("+AMKplus16index+")"+"   "+		
  		"E-7="+Eminus7+" ("+Eminus7posn+")"+"   "+"\n"+		
   		"E-6="+Eminus6+" ("+Eminus6posn+")"+"   "+		
   		"E-5="+Eminus5+" ("+Eminus5posn+")"+"   "+		
  		"GEL-1="+GELminus1+" ("+GELminus1index+")"+"   "+	
  		"GEL+0="+GELplus0+" ("+GELplus0index+")"+"   "+"\n"+
  		"GEL+1="+GELplus1+" ("+GELplus1index+")"+"   "+		
  		"GEL+2="+GELplus2+" ("+GELplus2index+")"+"   "+
  		"GEL+3="+GELplus3+" ("+GELplus3index+")"+"   "+
  		"GEL+4="+GELplus4+" ("+GELplus4index+")"+"   "+"\n"+
  		"GEL+7="+GELplus7+" ("+GELplus7index+")"+"   "+
  		"DFG+3="+DFGplus3+" ("+DFGplus3index+")"+"   "+
  		"PEN+1="+PENplus1+" ("+PENplus1index+")"+"   "+
  		"APE-10="+APEminus10+" ("+APEminus10index+")"+"   "+"\n"+
  		"APE-9="+APEminus9+" ("+APEminus9index+")"+"   "+
  		"APE-8="+APEminus8+" ("+APEminus8index+")"+"   "+
  		"APE-7="+APEminus7+" ("+APEminus7index+")"+"   "+
  		"APE-6="+APEminus6+" ("+APEminus6index+")"+"   "+"\n"+
  		"APE-5="+APEminus5+" ("+APEminus5index+")"+"   "+
  		"APE-4="+APEminus4+" ("+APEminus4index+")"+"   "+
  		"APE-3="+APEminus3+" ("+APEminus3index+")"+"   "+
  		"APE-2="+APEminus2+" ("+APEminus2index+")"+"   "+"\n"+
  		"APE-1="+APEminus1+" ("+APEminus1index+")"+"   "+
  		"APE+2="+APEplus2+" ("+APEplus2index+")"+"   "+
  		"APE+3="+APEplus3+" ("+APEplus3index+")"+"   "+
  		"APE+4="+APEplus4+" ("+APEplus4index+")"+"   "+"\n"+
		"B/C loop size=" +KEloop;
		//"APE+24="+APEplus24	 +"   "+
		//"APE+="+APEplus+"       "+
		//+keyResiduesStr;
		
		document.outputPanel.keyResidues.value = determsList;
  				
	return(keyResiduesStr);
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//******* FIND SUBSTRATE OLIGOPEPTIDE********

//0  GXG+3 
//1  GXG+4  
//2  AMK+11 
//3  AMK+12 
//4  AMK+13
//5  AMK+14 
//6  AMK+16 
//7  GEL-1 
//8  GEL+0
//9  GEL+1 	
//10 GEL+2
//11 GEL+3  
//12 GEL+4  
//13 DFG+3  
//14 APE-10 
//15 APE-9  
//16 APE-8
//17 APE-7
//18 APE-6 
//19 APE-5 
//20 APE-4  
//21 APE-3 
//22 APE-2 
//23 APE-1 
//24 APE+2 
//25 APE+3 
//26 APE+4 
//27 APE+24
//28 PEN+1
//29 Eminus7
//30 Eminus6
//31 Eminus5
//32 APE+38
//33 GEL+7
//34 loopsize
//35 loopsize
function findKinaseSubstrate(determinateResidues,kinaseType){

	var loopSize = parseInt(determinateResidues.charAt(34)+determinateResidues.charAt(35));
	var enz0 = "";
	var enz1 = "";
	var enz2 = "";
	var enz3 = "";
	var enz4 = "";
	var enz5 = "";
	var enz6 = "";
	var enz7 = "";
	var enz8 = "";
	var enz9 = "";
	var enz10 = "";
	var enz11 = "";
	
 	var PLFrule = false; //see plusOne ser thr

	var acidic = /[ED]/;			//Asp or Glu
	var hphob = /[GAVLIMPFW]/;		//hydrophobics
	var lgehphob = /[MILFW]/;		//large hydrophobics
	var smllhphob = /[GAVTP]/;		//small hydrophobics
	var small = /[GAVSTCHD]/;		//small size
	var hyphilic = /[STNQYCKRHDE]/;	//hydrophilic
	var lgeHyphilic = /[QEKR]/;		//large hydrophilic
	var Hbonding = /[SNQTY]/;		//hydrogen bonding
	var basic = /[RKH]/;			//basic
	var amphiphatic = /[TY]/;		//amphiphatic
	var SerORThr = /[ST]/;			//Ser or Thr
	var hphobAromatic = /[FW]/;		//hydrophoboic aromatic
	var positive = /[KRHQN]/;		//positive
	var foundComplement = "";
	var Ala = /A/;
	var AlaMinusOne = "";
	var FLIMVA = /[FLIMVA]/;
	var altPlusTwo = "";
	var output = "";
	var phosphoResidue = /[STY]/;	//Phosphorylable residue
	//document.outputPanel.notes.value = ""; 
	
	var minusThree = "";
	switch (kinaseType){
		case "tyrosine" :minusThreeType0();break;
		case "CMGC group" :minusThreeType1();break;
		case "serine/threonine" :minusThreeType2();break;
		default :break;
	}
	var minusTwo = "";
	switch (kinaseType){
		case "tyrosine" :minusTwoType0();break;
		case "CMGC group" :minusTwoType1();break;
		case "serine/threonine" :minusTwoType1();break;
		default :break;
	}
	var minusOne = "";
	switch (kinaseType){
		case "tyrosine" :minusOneType0();break;
		case "CMGC group" :minusOneType1();break;
		case "serine/threonine" :minusOneType1();break;
		default :break;
	}
	var zero = "";
	switch (kinaseType){
		case "tyrosine" :zero = "\r.0  Y";break;
		default :zero = "\r.0  S/T";break;
	}
	var plusOne = "";
	switch (kinaseType){
		case "tyrosine" :plusOneType0();break;
		case "CMGC group" :plusOneType1();break;
		case "serine/threonine" :plusOneType2();break;
		default :break;
	}
	var plusTwo = "";
	switch (kinaseType){
		case "tyrosine" :plusTwoType1();break;
		case "CMGC group" :plusTwoType0();break;
		case "serine/threonine" :plusTwoType1();break;
		default :break;
	}
	var plusThree = "";
	switch (kinaseType){
		case "tyrosine" :plusThreeType0();break;
		case "CMGC group" :plusThreeType1();break;
		case "serine/threonine" :plusThreeType2();break;
		default :break;
	}
	
	if(!(plusTwo=="\r+2  anything")){plusTwo = plusTwo + altPlusTwo;}
	var substrateOutput = minusThree+minusTwo+minusOne+zero+plusOne+plusTwo+plusThree;
	var substrateOutputArray = [minusThree,minusTwo,minusOne,zero,plusOne,plusTwo,plusThree]; 
	makeCookie(substrateOutputArray);
	
	return(substrateOutput);
	
//------------------------

function minusThreeType0(){							//tyrosine

	enz0 = determinateResidues.charAt(33); //GEL+7
	minusThree = "-3  " + findComplement(enz0);
	
	if(basic.test(enz0)){
		minusThree = "-3  E/D/";
	}
	
	minusThree = removeDuplicates(minusThree);

	if (minusThree == ""){minusThree = "-3  substrate not determined";}
	
	return;
}
//-----------------------
function minusThreeType1(){							//cyclinDep

	enz0 = determinateResidues.charAt(28); //PEN+1
	enz1 = determinateResidues.charAt(10); //GEL+2
	
	var reEQH = /[EQH]/;		
	if(reEQH.test(enz0)){		//PEN+1 = EQ or H
		if(enz0=="Q"){minusThree = "-3  N/G/S/L/";}
		if(enz0=="H"){minusThree = "-3  E/D/";notes(12);}
		if(enz0=="E"){minusThree = "-3  R/";}
	}
	var reSAG = /[SAGN]/;
	if(reSAG.test(enz0)){		//PEN+1 = SAN or G
		foundComplement = findComplement(enz1);
		minusThree = "-3  " + foundComplement;
		notes(13);
	}
	
	minusThree = removeDuplicates(minusThree);
	
	if (minusThree == ""){minusThree = "-3  substrate not determined";}
	return;
}
//-----------------------
function minusThreeType2(){ 						//serine threonine
	enz0 = determinateResidues.charAt(8); //GEL+0 
	enz1 = determinateResidues.charAt(9); //GEL+1 
	enz2 = determinateResidues.charAt(10); //GEL+2
	enz3 = determinateResidues.charAt(11); //GEL+3
	enz4 = determinateResidues.charAt(12); //GEL+4 
	enz5 = determinateResidues.charAt(28); //PEN+1
	 	
	if(enz1=="D"){  
		minusThree = "-3  R/K/Q/H/";
	}
	if(enz1=="E"){
		minusThree = "-3  R/K/";
		notes(10);
	}
	if((enz1=="D") && (acidic.test(enz4))){
		minusThree = "-3  R/K/";
	}
	if((enz1=="D") && (lgehphob.test(enz4))){
		minusThree = "-3  R/F/";
	}
	if(minusThree == ""){minusThree = "-3  ";}
	if(enz5=="H"){minusThree = minusThree + "D/S/";}	
	if(enz3=="K"){minusThree = minusThree + "E/";}
	if(enz3=="H"){minusThree = minusThree + "E/";}
	
	if(minusThree =="-3  "){
		minusThree = "-3  " + findComplement(enz1);
	}

	minusThree = removeDuplicates(minusThree);
	
	if (minusThree == ""){minusThree = "-3  substrate not determined";}
	return;
}
//-----------------------
function minusTwoType0(){								//tyrosine	
	
	enz0 = determinateResidues.charAt(8); //GEL+0 
	enz1 = determinateResidues.charAt(9); //GEL+1 
	enz2 = determinateResidues.charAt(10); //GEL+2
	enz3 = determinateResidues.charAt(11); //GEL+3
	enz4 = determinateResidues.charAt(12); //GEL+4
	enz5 = determinateResidues.charAt(17); //APE-7
	 	
	if(enz1=="D"){  
		minusTwo = "\r-2  R/Q/K/";
	}
	if(enz1=="E"){
		minusTwo = "\r-2  R/";
	}
	if((enz1=="D") && (acidic.test(enz4))){
		minusTwo = "\r-2  R/";
	}
	if((enz1=="D") && (lgehphob.test(enz4))){
		minusTwo = "\r-2  R/F/";
	}
	if(basic.test(enz5)){
		minusTwo = "\r-2  E/D/";	
	}
	if(hphob.test(enz5)){
		minusTwo = "\r-2  I/L/V/P/";	
	}
	if(acidic.test(enz5)){
		minusTwo = "\r-2  R/K/";	
	}
	if(enz5=="Q"){
		minusTwo = "\r-2  S/";	
	}	
	
	minusTwo = removeDuplicates(minusTwo);
	
	if (minusTwo == ""){minusTwo = "\r-2  substrate not determined";}
	return;
}	
//-----------------------	
function minusTwoType1(){							// ser/thr or cyc Dep

	enz0 = determinateResidues.charAt(19); //APE-5
	enz1 = determinateResidues.charAt(20); //APE-4
	enz2 = determinateResidues.charAt(21); //APE-3
	enz3 = determinateResidues.charAt(22); //APE-2
	enz4 = determinateResidues.charAt(27); //APE+24
	enz5 = determinateResidues.charAt(32); //APE+38
	enz6 = determinateResidues.charAt(28); //PEN+1	
	
if(SerORThr.test(enz0)){	//APE-5 S or T
	if(enz3=="Y"){						//APE-2 = Y
		if(enz2=="S"){							//APE-3 = S
			var minusTwoTag = true;
			minusTwo = "\r-2  Q/R/M/S/";
		}
		if(enz2=="N"){							//APE-3 = N
			var minusTwoTag = true;
			minusTwo = "\r-2  R/Q/M/S/";
		}
		if(enz2=="D"){							//APE-3 = D
			var minusTwoTag = true;
			minusTwo = "\r-2  R/K/M/";
		}
		if(enz2=="E"){							//APE-3 = E
			var minusTwoTag = true;	
			minusTwo = "\r-2  R/K/S/";
		}
		if(enz2=="A"){							//APE-3 = A
			minusTwo = "\r-2  Q/M/T/A/S/";
		}	
		if(enz2=="T"){							//APE-3 = T
			minusTwo = "\r-2  I/L/M/A/";
		}
		if(enz2=="H"){							//APE-3 = H
			minusTwo = "\r-2  D/E/S/T/";
		}	
		if(enz2=="G"){							//APE-3 = G
			minusTwo = "\r-2  Q/M/R/F/S/T/";
		}
		if(enz2=="F"){							//APE-3 = F
			var minusTwoTag = true;
			minusTwo = "\r-2  R/V/";
		}
		if(enz2=="Q"){							//APE-3 = Q
			minusTwo = "\r-2  H/Q/S/";
		}
		if(enz2=="P"){							//APE-3 = P
			minusTwo = "\r-2  S/A/L/F/";
		}
		if(enz2=="L"){							//APE-3 = L
			minusTwo = "\r-2  S/A/L/I/";
		}
		if(enz2=="R"){						//APE-3 = R
			minusTwo = "\r-2  S/E/D/";
			notes(23);
		}
	}
}

	if(hphobAromatic.test(enz3)){			//APE-2 = F or W
		if(enz2=="S"){							//APE-3 = S
			minusTwo = "\r-2  Q/S/L/T/";
		}
		if(enz2=="N"){							//APE-3 = N
			minusTwo = "\r-2  Q/M/S/";
		}
		if(enz2=="P"){							//APE-3 = P
			minusTwo = "\r-2  S/A/L/F/";
		}
		if(enz2=="D"){							//APE-3 = D
			minusTwo = "\r-2  K/M/A/S/";
		}
		if(enz2=="E"){							//APE-3 = E
			minusTwo = "\r-2  K/R/S/";
		}
		if(enz2=="A"){							//APE-3 = A
			minusTwo = "\r-2  A/M/";
		}	
		if(enz2=="T"){							//APE-3 = T
			minusTwo = "\r-2  I/L/A/";
		}
		if(enz2=="H"){							//APE-3 = H
			minusTwo = "\r-2  D/E/S/T/";
		}	
		if(enz2=="G"){							//APE-3 = G
			minusTwo = "\r-2  A/V/";
		}
		if(enz2=="F"){							//APE-3 = F
			minusTwo = "\r-2  V/S/A/";
		}
		if(enz2=="Q"){							//APE-3 = Q
			minusTwo = "\r-2  H/Q/S/";
		}
	}
	
	if(enz1=="R"){minusTwo = "\r-2  E/D/S/";notes(22);}
	
	if (minusTwo ==""){
		minusTwo = "\r-2  " + findComplement(enz2);
	}

	if(enz4=="E"){
		if(!minusTwoTag){	
			minusTwo = minusTwo.slice(0,(minusTwo.length-1));				//APE+24
			minusTwo = minusTwo + " also possible R/";
		}
	}
	if(enz4=="K"){
		if(!minusTwoTag){	
			minusTwo = minusTwo.slice(0,(minusTwo.length-1));				//APE+24
			minusTwo = minusTwo + " also possible Y/";
			notes(22);
		}
	}
	
	if(document.outputPanel[9].value == "CMGC group"){//cyclin Dep
		if(acidic.test(enz5)){
			minusTwo = "\r-2  H/";
		}
		if(enz5=="H"){
			minusTwo = "\r-2  E/D/S";
			notes(22);
		}
		if((hphobAromatic.test(enz2))||(enz1=="Y")){ //APE-3 or APE-4 = Y
			minusTwo = "\r-2  P/V/A/L/S/";
		}
		notes(21);
	}
	
	if(enz6=="H"){minusTwo = minusTwo + "D/E/S/";notes(22);}
	
	minusTwo = removeDuplicates(minusTwo);
	if (minusTwo.slice((minusTwo.length)-14, minusTwo.length)=="also possible "){
		minusTwo = minusTwo.slice(0,minusTwo.length-16);
	}
	
	if (minusTwo== ""){minusTwo = "\r-2  substrate not determined";}
	return;
}
//----------------------
function minusOneType0(){							// tyr
	enz0 = determinateResidues.charAt(11); //GEL+3
	
	if(basic.test(enz0)){
		foundComplement = findComplement(enz0);
		minusOne = "\r-1  "+foundComplement;
	}
	if(hphob.test(enz0)){
		foundComplement = findComplement(enz0);
		minusOne = "\r-1  I/V/T/";
	}
	minusOne = removeDuplicates(minusOne);
	
	if (minusOne == ""){minusOne = "\r-1  substrate not determined";}
	return;
}
//-----------------------	
function minusOneType1(){							// cyc Dep and ser thr
	
	enz0 = determinateResidues.charAt(0); //GXG+3
	
	if(enz0=="S"){
		minusOne = "\r-1  R/K/F/L/";
	}
	if((enz0=="T") || (enz0=="V")){
		minusOne = "\r-1  R/F/M/I/L/";
	}
	if(enz0=="H"){
		minusOne = "\r-1  Q/E/";
	}
	if(enz0=="E"){
		minusOne = "\r-1  R/K/";
	}
	if(enz0=="K"){
		minusOne = "\r-1  E/D/";
	}
	if((enz0=="Q") || (enz0=="H") || (enz0=="E")){
		minusOne = "\r-1  S/N/Q/";
	}
	if((enz0=="G")||(enz0=="A")){
		minusOne = "\r-1  F/M/L/";
	}
	if(minusOne ==""){
		minusOne = "\r-1  anything";
	}
	minusOne = removeDuplicates(minusOne);
	notes(30);

	if (minusOne == ""){minusOne = "\r-1  substrate not determined";}
	return;
}
//-----------------------
function plusOneType0(){							//tyr
	
	enz0 = determinateResidues.charAt(20); //APE-4
	
	plusOne = "\r+1  " + findComplement(enz0);	
	plusOne = removeDuplicates(plusOne);

	if (plusOne == ""){plusOne = "\r+1  substrate not determined";}
	return;
}
//-----------------------	
function plusOneType1(){							//cyc Dep

	enz0 = determinateResidues.charAt(23); //APE-1
	enz1 = determinateResidues.charAt(14); //APE-10
	enz2 = determinateResidues.charAt(15); //APE-9
	enz3 = determinateResidues.charAt(16); //APE-8
	enz4 = determinateResidues.charAt(20); //APE-4

	if(phosphoResidue.test(enz1)){
		plusOne = "\r+1  P/";
	}
	if(acidic.test(enz1)){
		plusOne = "\r+1  P/";
	}
	if((enz4=="R") && (!phosphoResidue.test(enz1))){
		plusOne = "\r+1  E/";
	}
	
	if(plusOne==""){
		foundComplement = findComplement(enz4);
		plusOne = "\r+1  "+foundComplement;
	}
	
	plusOne = removeDuplicates(plusOne);

	if (plusOne == ""){plusOne = "\r+1  substrate not determined";}
	return;
}
//----------------------	
function plusOneType2(){							//ser/thr

	enz0 = determinateResidues.charAt(13); //DFG+3
	enz1 = determinateResidues.charAt(20); //APE-4
	enz2 = determinateResidues.charAt(16); //APE-8
	enz3 = determinateResidues.charAt(23); //APE-1

	//if(FLIMVA.test(enz0)){ //DFGX = FLIMVA
		if(enz1!="P"){			//APE-4 not P
			var reLIF = /[LIF]/;
			if(reLIF.test(enz1)){ 	//APE-4 = LIF
				plusOne = "\r+1  V/A/I/L/";
				notes(41);
			}
			if(basic.test(enz1)){ 	//APE-4 = RKH
				plusOne = "\r+1  E/";
				if(enz1=="H"){plusOne = "\r+1  E/Q/T/";}
			}
			var reCVT = /[CVT]/;
			if(reCVT.test(enz1)){ 	//APE-4 = CVT
				plusOne = "\r+1  A/V/I/L/M/Y/";
			}
			if(enz1=="N"){ 			//APE-4 = N
				plusOne = "\r+1  S/D/N/";
			}
			if(enz1=="S"){			//APE-4 = S
				plusOne = "\r+1  N/S/D/";
			}
			if (enz1 == "E"){		//APE-4 = E
				plusOne = "\r+1  H/N/";
			}
			
			if(enz1 == "D"){			//APE-4 = D
				plusOne = "\r+1  H/N/";
			}
			if(enz1=="A"){ 			//APE-4 = A
				plusOne = "\r+1  V/A/I/L/M/Y/";
			}
			if(enz1=="Y"){ 			//APE-4 = Y
				plusOne = "\r+1  T/";
			}
		}
		
		if(enz1=="P"){ 				//APE-4 = P
		var reVANPTCG = /[VANPTCG]/;			
		var reLIM = /[LIM]/;
			if(enz2=="F"){ 			//APE-8 = F
				if(reLIM.test(enz3)){ 	//APE-1=LIM
					plusOne = "\r+1  F/L/Y/";
					PLFrule = true;		//see plus three rules
				}
				if(reVANPTCG.test(enz3)){ 	//APE-1=small hphob
					plusOne = "\r+1  A/V/I/P/";
				}
			}
			if(reLIM.test(enz2)){		//APE-8 = LIM
				if(enz3=="Y"){ 			//APE-1=Y
					plusOne = "\r+1  R/";
				}
				if(reLIM.test(enz3)){	//APE-1=LIM
					plusOne = "\r+1  F/L/M/I/";
					PLFrule = true;		//see plus three rules
				}
				if(enz3=="V"){
					plusOne = "\r+1  F/L/I/M/V/";
				}
				if(enz3=="A"){
					plusOne = "\r+1  V/A/";
				}
				if(enz3=="F"){
					plusOne = "\r+1  L/I/M/";
				}
			}
			var reVANPTCG = /[VANPTCG]/;	//smalls
			if(reVANPTCG.test(enz2)){     	//APE-8 = V or A
					plusOne = "\r+1  V/A/";
				if(lgehphob.test(enz3)){ 	//APE-1=FLIMW
					plusOne = "\r+1  V/I/L/M/F/";
					PLFrule = true;		//see plus three rules
				}
				
			}
			if(enz2=="Y"){ 			//APE-8 = Y
				plusOne = "\r+1  R/";
			}
			if(enz2=="S"){ 			//APE-8 = S
				plusOne = "\r+1  V/A/";
			}
			if(enz2=="Q"){ 			//APE-8 = Q
				plusOne = "\r+1  Q/H/E/T/";
			}
			if(acidic.test(enz2)){ 	//APE-8 = DE
				plusOne = "\r+1  R/";
			}
			if(basic.test(enz2)){ 	//APE-8 = RKH
				plusOne = "\r+1  E/D/";
			}
		}
	
	if(enz0=="H"){
		if(plusOne!=""){
			plusOne = plusOne + "D/";
		}
	}
	if(enz0=="S"){
		if(plusOne!=""){
			plusOne = plusOne + "H/";
		}
	}
	if(enz0=="Q"){
		if(plusOne!=""){
			plusOne = plusOne + "N/F/L/";
		}
	}
	if(enz0=="E"){
		if(plusOne!=""){
			plusOne = plusOne + "S/N/";
		}
	}
	if(plusOne==""){
		plusOne = "\r+1  " + findComplement(enz0);
		plusOne = removeLarge(plusOne);
	}
	if(enz3=="Y"){
		plusOne = "\r+1  R/";
		notes(43);
	}
		
	plusOne = removeDuplicates(plusOne);

	if (plusOne == ""){plusOne = "\r+1  substrate not determined";}
	return;
}
//------------------------
	
function plusTwoType0(){							//cyc Dep
	
	enz1 = determinateResidues.charAt(0); //GXG+3
	enz2 = determinateResidues.charAt(1); //GXG+4
	enz3 = determinateResidues.charAt(2); //AMK+11
	enz4 = determinateResidues.charAt(4); //AMK+13
	
	if(enz2=="Y"){
		plusTwo = "\r+2  R/K/M/H/";
		notes(52);
	}
	if(enz1=="A"){
		plusTwo = "\r+2  P/F/L/I/";
	}
	if(enz1=="T"){
		plusTwo = "\r+2  K/R/M/I/";
	}
	if(basic.test(enz3+enz4)){
		if(plusTwo == ""){plusTwo = "\r+2  D/E/";}
		plusTwo = plusTwo + "D/E/"
		
	}
	
	if(plusTwo==""){plusTwo = "\r+2  " + findComplement(enz2);}	

	
	plusTwo = removeDuplicates(plusTwo);

	if (plusTwo == ""){plusTwo = "\r+2  substrate not determined";}
	return;
}
//----------------------	
function plusTwoType1(){				//ser thr tyr

	enz0 = determinateResidues.charAt(0); //GXG+3
	enz1 = determinateResidues.charAt(1); //GXG+4
	enz2 = determinateResidues.charAt(3); //AMK+12 or K+10
	enz3 = determinateResidues.charAt(5); //AMK+14 or K+12
	enz4 = determinateResidues.charAt(6); //AMK+16
	enz5 = determinateResidues.charAt(2); //AMK+11 or K+9
	enz6 = determinateResidues.charAt(4); //AMK+13 or K+11
	enz7 = determinateResidues.charAt(29); //E-7
	enz8 = determinateResidues.charAt(30); //E-6
	enz9 = determinateResidues.charAt(31); //E-5
	enz10 = determinateResidues.charAt(13); //DFG+3
	enz11 = determinateResidues.charAt(15); //APE-9

	if(loopSize==19){
		if(enz1=="Y"){		//GXG+4 = Y
			plusTwo = "\r+2  F/M/S/T/";
		}
		
		if((lgeHyphilic.test(enz2))&&(lgeHyphilic.test(enz3))){
			plusTwo = "\r+2  S/N/Q/T/";
			if((enz2=="E")||(enz3=="E")){
				plusTwo = plusTwo + "R/K/"
			}
			if((basic.test(enz2))||(basic.test(enz3))){
				plusTwo = plusTwo + "D/E/S/T/"
			}
		}
		if(enz1!="Y"){			//GXG+4 not = Y
			if((basic.test(enz2)&&(acidic.test(enz3))) || (basic.test(enz3)&&(acidic.test(enz2)))	){
				plusTwo = "\r+2  S/T/N/G/A/P/";
			}
			else{
				plusTwo = "\r+2  "+ findComplement(enz2);
			}
		}
		if(lgehphob.test(enz3)){
			plusTwo = "\r+2  V/I/L/M/";
		}
		
	}
	
	if(loopSize==18){
		if(basic.test(enz2)){			//K+10 basic
			plusTwo = "\r+2  E/D/S/";
		}
	}

	if((loopSize==18)&&(enz5=="T")){
		if(acidic.test(enz2)){
			plusTwo = "\r+2  R/";
		}
		if(enz2=="Q"){
			plusTwo = "\r+2  E/";
		}
		if(enz2==""){
			plusTwo = findComplement(enz2);
			plusTwo = "\r+2  "+plusTwo+findComplement(enz3);
		}
	}

	if((loopSize >= 14)&&(loopSize < 18)){
		if(((enz7=="E")&&(enz8=="K"))||((enz7=="K")&&(enz8=="E"))){
			plusTwo = "\r+2  S/T/N/D/H/";
		}
		if((enz7=="D")&&(enz8=="Q")){
			plusTwo = "\r+2  H/S/N/";
		}
		if((enz7=="D")&&(enz8=="K")){
			plusTwo = "\r+2  Q/S/";
		}
	}
	
	if((loopSize > 11)&&(loopSize < 14)){	
		plusTwo = "\r+2  " + findComplement(enz8);
	}
	if(loopSize ==12){	
		plusTwo = findComplement(enz2);
		plusTwo = "\r+2  "+ plusTwo + findComplement(enz3);
	}
	
	if((loopSize > 19)&&(loopSize < 63)){	
		plusTwo = "\r+2  " + findComplement(enz6);
	}
	if((enz1=="F") && (enz10=="F")){
		plusTwo = "\r+2  A/V/I/";
	}
	if((enz1=="Y") && (enz10=="M")){
		plusTwo = "\r+2  A/V/I/";
	}

	if (plusTwo==""){
		plusTwo = "\r+2  ";				//if nothing then depends on complement GXG+3
		plusTwo = plusTwo + findComplement(enz0);
	}

	plusTwo = removeDuplicates(plusTwo);
				
	if (plusTwo == ""){plusTwo = "\r+2  substrate not determined";}
	return;
}
//------------------------	
function plusThreeType0(){							//tyr

	enz0 = determinateResidues.charAt(23); //APE-1

	plusThree = "\r+3  " + findComplement(enz0); 
	
	plusThree = removeDuplicates(plusThree);
	
	if (plusThree == ""){plusThree = "\r+3  substrate not determined";}
	return;
}
//------------------------
function plusThreeType1(){						//cyc Dep
	
	enz0 = determinateResidues.charAt(15); //APE-9
	enz1 = determinateResidues.charAt(16);//APE-8
	enz2 = determinateResidues.charAt(14);//APE-10
  	
  	if(phosphoResidue.test(enz2)){				//phosphoresidue at APE-10
  		plusThree = "\r+3  R/K/Q/S/L/";
  		notes(60);
  	}
  	if(!phosphoResidue.test(enz2)){				// not phosphoresidue at APE-10
  		plusThree = "\r+3  "+findComplement(enz2);
  	}
  	
	plusThree = removeDuplicates(plusThree);

	if (plusThree == ""){plusThree = "\r+3  substrate not determined";}
	return;
}
//-----------------------
function plusThreeType2(){							//ser/thr
	enz0 = determinateResidues.charAt(15); //APE-9
	enz1 = determinateResidues.charAt(16);//APE-8
  	
  	if(phosphoResidue.test(enz0)){
  		if((enz1=="F") || (enz1=="Y")){
  			plusThree = plusThree + "\r+3  A/V/F/L/";
  		}
  		if(enz1=="L"){
  			plusThree = plusThree + "\r+3  I/L/M/A/";
  		}
  		if((enz1=="A") || (enz1=="G")){
  			plusThree = plusThree + "\r+3  anything";
  		}
  		if(plusThree==""){
  			plusThree = "\r+3  "+findComplement(enz1);
  		}
  		plusThree = plusThree + " also possible R/K";
  		notes(61);
  	}
  	  	
  	if(!phosphoResidue.test(enz0)){
  		if (!PLFrule){plusThree = findComplement(enz1);}
  		plusThree = "\r+3  " + plusThree + findComplement(enz1) + findComplement(enz0);
  		if(basic.test(enz1)){plusThree = "\r+3  E/D/S/";}
  		notes(62);
  	}
  	
  	if(enz0=="G"){
  		if(enz1=="F"){
  			plusThree = "\r+3  L/I/M/";
  		}
  	}
  	
  	plusThree = removeSmalls(plusThree);
	plusThree = removeDuplicates(plusThree);
	if (plusThree.slice((plusThree.length)-14, plusThree.length)=="also possible "){
		plusThree = plusThree.slice(0,plusThree.length-16);
	}
	if(plusThree.slice(plusThree.length-8,plusThree.length) == "anything"){
		plusThree = "\r+3  anything";
	}
  	
	if (plusThree == ""){plusThree = "\r+3  substrate not determined";}
	return;
}
//---------------------------------------------------------------------------------------
function removeSmalls(inputStr){
	var reGC = /[GC]\W/g;
	var outputStr;
	outputStr = inputStr.replace(reGC,"");
	return(outputStr);
}

function removeLarge(inputStr){
	var reLarge = /[LIMPFWQKRE]\W/g;
	var outputStr;
	outputStr = inputStr.replace(reLarge,"");
	return(outputStr);
}
//---------------------------------------------------------------------------------------

function findComplement(keyResidue){
	var complement="";
	switch (keyResidue){
		case "A" :complement = "V/L/I/M/F/C/";break;
		case "C" :complement = "L/I/M/F/";break;
		case "D" :complement = "R/K/H/Q/";break;
		case "E" :complement = "R/K/H/Q/";break;
		case "F" :complement = "A/G/V/L/I/M/P/F/Y/";break;
		case "G" :complement = "anything";break;
		case "H" :complement = "D/E/S/Q/";break;
		case "I" :complement = "A/G/V/L/T/C/";break;
		case "K" :complement = "D/E/";break;
		case "L" :complement = "A/G/V/L/I/M/P/F/T/C/";break;
		case "M" :complement = "A/G/V/L/I/F/C/";break;
		case "N" :complement = "S/Q/N/";break;
		case "P" :complement = "M/F/L/I/";break;
		case "Q" :complement = "S/E/H/Q/";break;
		case "R" :complement = "D/E/S/T/Y/";break;
		case "S" :complement = "Q/N/R/K/H/";break;
		case "T" :complement = "F/L/I/";break;
		case "V" :complement = "A/L/I/M/P/F/C/";break;
		case "W" :complement = "A/G/V/L/I/F/Y/C/";break;
		case "Y" :complement = "R/K/F/";break;
		default :break;
	}
	return(complement);
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------

function removeDuplicates(input){
	var output = "";
	var strArray = new Array();
	var i = 0;						//removes capital letter duplicates in a string 
	var j = 0;
	var ch = "";
	for (i = 0; i< input.length; i++){
		strArray[i] = input.charAt(i);
	}
	
	for (i = 0; i< strArray.length; i++){
		ch = strArray[i];
		if (ch=="~"){
			continue;		
		}
		for (j = i+1; j< strArray.length; j++){
			if((ch==strArray[j])&&(((ch.charCodeAt(0) > 64) && (ch.charCodeAt(0)< 91)))){
				strArray[j] = "~";strArray[j+1] = "~";
			}
		}
		output = output  + strArray[i];
	}
	if (output.charAt(output.length-1)=="/"){
		output = output.slice(0,(output.length-1))
	}
return(output);
}
//---------------------------------------------------------------------------------------

function makeCookie(input){
	var count = 0;
	var cookieData = "";
	for (count=0;count< input.length;count++){
		cookieData = cookieData + "[" + stripper(input[count]) + "]";
	}
	document.cookie = "name = " + cookieData;
	return;
}
//---------------------------------------------------------------------------------------
}

function notes(note){
	switch (note){
		case 10 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-3): If the acidic residue at GEL+1 is E, then R is strongly supported.\r\r";break;
		case 11 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-3): H is most likely.\r\r";break;
		case 12 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-3): E is most likely.\r\r";break;
		case 13 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-3): Most substitutions are tolerated.\r\r";break;
		case 20 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-2): A phosphorylated residue at APE-9 supports R or K.\r\r";break;
		case 21 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-2): Substitutions in this position are tolerated.\r\r";break;
		case 22 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-2): A phosphorylated residue is possible at this position.\r\r";break;
		case 23 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-2): A phosphorylated serine at this position behaves like D or E.\r\r";break;
		case 30 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(-1): Most substitutions in this position are tolerated.\r\r";break;
		case 40 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+1): Hydrophobic residues are moderately tolerated.\r\r";break;
		case 41 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+1): Small hydrophilic residues are moderately tolerated.\r\r";break;		
		case 42 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+1): APE-10 is phosphorylated.\r\r";break;	
		case 43 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+1): R if APE-1 is phosphorylated.\r\r";break;
		case 50 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+2): \r\r";break;
		case 51 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+2): Most substitutions in this position are tolerated.\r\r";break;
		case 52 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+2): Aliphatic amino acid substitutions in this position are tolerated.\r\r";break;
		case 60 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+3): Small hydrophobics possible.\r\r";break;
		case 61 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+3): Phosphorylated residue at APE-9 supports K/R.\r\r";break;
		case 62 :document.outputPanel.notes.value = document.outputPanel.notes.value +	
"(+3): Most substitutions in this position are tolerated.\r\r";break;

default :break;
	}
	return;
}

function discriminate(sequence){
	
	var groupType = "";
	var i = 54;
	var typesArray = new Array("Cyclic nucleotide regulated protein kinase family AGC Group I.\nBroad consensus specificity for this group is R-(R/K)-X-S/T-hydrophobic.",
							"Diacylglycerol-activated/phospholipid-dependent protein kinase C (PKC) family AGC Group II.\nBroad consensus specificity for this group is (R/K)-(R/K)-X-S/T-hydrophobic-(R/K)-X.",
							"RAC(Akt) protein kinase family AGC Group III.\nBroad consensus specificity for this group is R-X-X-S/T-hydrophobic-(S/G/T).",
							"Kinases that phoshorylate G protein-coupled receptors family AGC Group IV",
							"Budding yeast AGC-related protein kinase family AGC Group V",
							"Kinases that phosphorylate ribosomal protein S6 family AGC Group VI.\nBroad consensus specificity for this group is (K/R)-X-R-X-X-S/T-hydrophobic.",
							"Budding yeast DBF2/20 family\nAGC Group VII",
							"Flowering plant PVPK1 protein kinase homolog family AGC Group VIII",
							"AGC Group Other",
							//"Kinases regulated by Ca2+/CaM and close relatives family CaMK Group I",
							"Kinases regulated by Ca2+/CaM and close relatives family CaMK.\nBroad consensus specificity for this group is (R/K)-X-X-S/T-X-X.",
							"Kinases regulated by Ca2+/CaM and close relatives family CaMK.\nBroad consensus specificity for this group is (R/K)-X-X-S/T-X-X.",
							"Kinases regulated by Ca2+/CaM and close relatives family CaMK.\nBroad consensus specificity for this group is (R/K)-X-X-S/T-X-X.",
							//"KIN1/SNF1/Nim1 family CaMK Group II",
							//"CaMK Other",
							"Cyclin-dependent kinases (CDKs) and close relatives family CMGC Group I.\nBroad consensus specificity for this group is X-X-(R/K)-S/T-P-X-(K/R).",
							"ERK (MAP) kinase family CMGC Group II.\nBroad consensus specificity for this group is X-X-X-S/T-P-X-(K/R).",
							"Glycogen synthase kinase 3 (GSK3) family CMGC Group III.",
							"Casein kinase II family CMGC Group IV.\nBroad consensus specificity for this group is X-P-X-S/T-P-X-X.",
							"Clk family CMGC Group V",
							"CMGC Group Other",
							"Src family PTK group I",
							"Tec/Atk family PTK group II",
							"Csk family PTK group III",
							"Fes (Fps) family PTK group IV",
							"Abl family PTK group V",
							"Syk/ZAP70 family PTK group VI",
							"Tyk2/Jak1 family PTK group VII",
							"Ack family PTK group VIII",
							"Focal adhesion kinase family PTK group IX",
							"Epidermal growth factor receptor family PTK group X",
							"Eph/Elk/Eck orphan receptor family PTK group XI",
							"Axl family PTK group XII",
							"Tie/Tck family PTK group XIII",
							"Platelet-derived growth factor receptor family PTK group XIV",
							"Fibroblast growth factor receptor family PTK group XV",
							"Insulin receptor family PTK group XVI",
							"LTK/ALK family PTK group XVII",
							"Ros/Sevenless family PTK group XVIII",
							"Trk/Ror family PTK group XIX",
							"DDR/TKT family PTK group XX",
							"Hepatocyte growth factor family PTK group XXI",
							"Nematode Kin15/16 family PTK group XXII",
							"Other membrane spanning kinases PTK Other",
							"Polo family OPK Group I",
							"MEK/STE7 family OPK Group II",
							"PAK/STE20 family OPK Group III",
							"MEKK/STE11 family OPK Group IV",
							"NimA family OPK Group V",
							"wee1/mik1 family OPK Group VI",
							"Kinases involved in transcriptional control family OPK Group VII",
							"Raf family OPK Group VIII",
							"Activin/TGFb receptor family OPK Group IX",
							"Flowering plant putative receptor kinases and close relatives family OPK Group X.",
							"PSK/PTK mixed lineage leucine zipper domain family OPK Group XI",
							"Casein kinase I family OPK Group XII",
							"PKN prokaryotic protein kinase family OPK Group XIII",
							"Family subgroup not determined.");
		
	var reAGCI = /[TV]DFG[FE][ATDS][KR]/;  //blasted
	var reAGCIa = /[IV][KIRQ].[HQ][PRK]WF/;  //blasted
		if((reAGCI.test(sequence))&&(reAGCIa.test(sequence))){
			i = 0;
			output(reAGCI.source,reAGCIa.source,reAGCI.exec(sequence).index+1,reAGCIa.exec(sequence).index+1);
		}
	var reAGCII = /YRDLKL[DE]N/; //blasted
	var reAGCIIa = /VMYEM[MI]C/;
		if(reAGCII.test(sequence)&&!(reAGCIIa.test(sequence))){
			i = 1;
			output1(reAGCII.source,reAGCII.exec(sequence).index+1);
		}
	var reAGCIII = /VMYEM[MI]C/; //blasted
	var reAGCIIIa = /F[WF]HLS[HR]ER[VI]/;		
		if((reAGCIII.test(sequence))&&(reAGCIIIa.test(sequence))){
			i = 2;
			output(reAGCIII.source,reAGCIIIa.source,reAGCIII.exec(sequence).index+1,reAGCIIIa.exec(sequence).index+1);
		}	
	var reAGCIV = /[TS]GK[ML]YA[MCL]K/;//blasted
	var reAGCIVa = /G[KR]GGFGEV/;
		if((reAGCIV.test(sequence))&&(reAGCIVa.test(sequence))){
			i = 3;
			output(reAGCIV.source,reAGCIVa.source,reAGCIV.exec(sequence).index+1,reAGCIVa.exec(sequence).index+1);
		}	
	var reAGCV = /IALCDFG/;//blasted
		if(reAGCV.test(sequence)){
			i = 4;
			output1(reAGCV.source,reAGCV.exec(sequence).index+1);
		}	
	var reAGCVI = /GKLYLIL/;//blasted
		if(reAGCVI.test(sequence)){
			i = 5;
			output1(reAGCVI.source,reAGCVI.exec(sequence).index+1);
		}
	var reAGCVII = /SPDYMA[LP]E/;//blasted
		if(reAGCVII.test(sequence)){
			i = 6;
			output1(reAGCVII.source,reAGCVII.exec(sequence).index+1);
		}		
	var reAGCVIII = /L[ST]DFDLS/;//blasted
		if(reAGCVIII.test(sequence)){
			i = 7;
			output1(reAGCVIII.source,reAGCVIII.exec(sequence).index+1);
		}
	var reAGCother = /x/;
		if(reAGCother.test(sequence)){i = 8;output();}
	var reCaMKI = /G[ED][LF][FL][ED][DRKY][ILV]/;
	var reCaMKIa = /W..GVI[LTA]/;
		if(reCaMKI.test(sequence)){
			i = 9;
			output1(reCaMKI.source,reCaMKI.exec(sequence).index+1);
		}
		else{
			if(reCaMKIa.test(sequence)){
			i = 9;
			output1(reCaMKIa.source,reCaMKIa.exec(sequence).index+1);
			}
		}	
	var reCaMKII = /x/;
		if(reCaMKII.test(sequence)){i = 10;output();}
	var reCaMKother = /x/;
		if(reCaMKother.test(sequence)){i = 11;output();}
	var reCMGCI = /HRD[LM]KP[QN]N/;
		if(reCMGCI.test(sequence)){
			i = 12;
			output1(reCMGCI.source,reCMGCI.exec(sequence).index+1);
		}		
	var reCMGCII = /HRDLKP[SAG]N/;
		if(reCMGCII.test(sequence)){
			i = 13;
			output1(reCMGCII.source,reCMGCII.exec(sequence).index+1);
		}		
	var reCMGCIII = /CHRDIKP[QS]N/;
		if(reCMGCIII.test(sequence)){
			i = 14;
			output1(reCMGCIII.source,reCMGCIII.exec(sequence).index+1);
		}		
	var reCMGCIV = /MHRD[VI]KP[HSQ]N/;
		if(reCMGCIV.test(sequence)){
			i = 15;
			output1(reCMGCIV.source,reCMGCIV.exec(sequence).index+1);
		}		
	var reCMGCV = /H[TCS]D[LI]KP[ED]N/;
		if(reCMGCV.test(sequence)){
			i = 16;
			output1(reCMGCV.source,reCMGCV.exec(sequence).index+1);
		}	
	var reCMGCother = /T[LR]WYR[APS]PE/;
		if(reCMGCother.test(sequence)&& i==0){
			i = 17;
			output1(reCMGCother.source,reCMGCother.exec(sequence).index+1);
		}		
//---var rePTKI = /EP[IV]YI[VI][TQ]E/;
//---	if(rePTKI.test(sequence)){
//---		i = 18;
//---			output1(rePTKI.source,rePTKI.exec(sequence).index+1);
//---		}			
//---	var rePTKII = /DFG..R[YF]VLDD/;
//---		if(rePTKII.test(sequence)){
//---			i = 19;
//---			output1(rePTKII.source,rePTKII.exec(sequence).index+1);
//---		}		
//---	var rePTKIII = /TAQAFL.E/;
//---		if(rePTKIII.test(sequence)){
//---			i = 20;
//---			output1(rePTKIII.source,rePTKIII.exec(sequence).index+1);
//---		}		
//---	var rePTKIV = /QE[AG][RK]ILKQY/;
//---		if(rePTKIV.test(sequence)){
//---			i = 21;
//---			output1(rePTKIV.source,rePTKIV.exec(sequence).index+1);
//---		}		
//---	var rePTKV = /TYTAHAG[AT]K/;
//---		if(rePTKV.test(sequence)){
//---			i = 22;
//---			output1(rePTKV.source,rePTKV.exec(sequence).index+1);
//---		}		
//---	var rePTKVI = /WP[VL][KR]WYAPE/;
//---		if(rePTKVI.test(sequence)){
//---			i = 23;
//---			output1(rePTKVI.source,rePTKVI.exec(sequence).index+1);
//---		}		
//---	var rePTKVII = /[DE][SI]P[VI][FR]WY[AS]PE/;
//---		if(rePTKVII.test(sequence)){
//---			i = 24;
//---			output1(rePTKVII.source,rePTKVII.exec(sequence).index+1);
//---		}		
//---	var rePTKVIII = /DD[HC]YVM.EH/;
//---		if(rePTKVIII.test(sequence)){
//---			i = 25;
//---			output1(rePTKVIII.source,rePTKVIII.exec(sequence).index+1);
//---		}		
//---	var rePTKIX = /INFRRFTS/;
//---		if(rePTKIX.test(sequence)){
//---			i = 26;
//---			output1(rePTKIX.source,rePTKIX.exec(sequence).index+1);
//---		}		
//---	var rePTKX = /T[VILC]WE[LI][MLIF]TFG/;
//---		if(rePTKX.test(sequence)){
//---			i = 27;
//---			output1(rePTKX.source,rePTKX.exec(sequence).index+1);
//---		}		
//---	var rePTKXI = /EA[STAG]IMGQF/;
//---		if(rePTKXI.test(sequence)){
//---			i = 28;
//---			output1(rePTKXI.source,rePTKXI.exec(sequence).index+1);
//---		}		
//---	var rePTKXII = /EA[AV]CMK[DE]F/; //BLASTED
//---		if(rePTKXII.test(sequence)){
//---			i = 29;
//---			output1(rePTKXII.source,rePTKXII.exec(sequence).index+1);
//---		}		
//---	var rePTKXIII = /ELEVL[CS][KR]LG/;//Blasted
//---		if(rePTKXIII.test(sequence)){
//---			i = 30;
//---			output1(rePTKXIII.source,rePTKXIII.exec(sequence).index+1);
//---		}		
//---	var rePTKXIV = /ALM[SD]ELK[IV]/; //BLASTED
//---		if(rePTKXIV.test(sequence)){
//---			i = 31;
//---			output1(rePTKXIV.source,rePTKXIV.exec(sequence).index+1);
//---		}		
//---	var rePTKXV = /[IV][SR]EME[MV]MK[ML]/; //BLASTED
//---		if(rePTKXV.test(sequence)){
//---			i = 32;
//---			output1(rePTKXV.source,rePTKXV.exec(sequence).index+1);
//---		}		
//---	var rePTKXVI = /EA[ST][VTI]MK[GAE]F/; //BLASTED
//---		if(rePTKXVI.test(sequence)){
//---			i = 33;
//---			output1(rePTKXVI.source,rePTKXVI.exec(sequence).index+1);
//---		}		
//---	var rePTKXVII = /MEALIISKF/; //BLASTED
//---		if(rePTKXVII.test(sequence)){
//---			i = 34;
//---			output1(rePTKXVII.source,rePTKXVII.exec(sequence).index+1);
//---		}		
//---	var rePTKXVIII = /EA[HQ]LMS[KN]F/; //BLASTED
//---		if(rePTKXVIII.test(sequence)){
//---			i = 35;
//---			output1(rePTKXVIII.source,rePTKXVIII.exec(sequence).index+1);
//---		}		
//---	var rePTKXIX = /GV[VI]LWE[IV]F/; //BLASTED
//---		if(rePTKXIX.test(sequence)){
//---			i = 36;
//---			output1(rePTKXIX.source,rePTKXIX.exec(sequence).index+1);
//---		}		
//---	var rePTKXX = /[RK]E[VI]KIMSRL/; //BLASTED
//---		if(rePTKXX.test(sequence)){
//---			i = 37;
//---			output1(rePTKXX.source,rePTKXX.exec(sequence).index+1);
//---		}		
//---	var rePTKXXI = /MALESLQT/; //BLASTED
//---		if(rePTKXXI.test(sequence)){
//---			i = 38;
//---			output1(rePTKXXI.source,rePTKXXI.exec(sequence).index+1);
//---		}		
//---	var rePTKXXII = /HRDLALRN/; //BLASTED
//---		if(rePTKXXII.test(sequence)){
//---			i = 39;
//---			output1(rePTKXXII.source,rePTKXXII.exec(sequence).index+1);
//---		}		
//---	var rePTKother = /x/;
//---		if(rePTKother.test(sequence)){i = 40;output();}
		
	var reOPKI = /HRDLKLGN/; //BLASTED
		if(reOPKI.test(sequence)){
			i = 41;
			output1(reOPKI.source,reOPKI.exec(sequence).index+1);
		}		
	var reOPKII = /K[LI]CDFG[VI]S/; //BLASTED
		if(reOPKII.test(sequence)){
			i = 42;
			output1(reOPKII.source,reOPKII.exec(sequence).index+1);
		}
		
	var reOPKIII = /KKELIINE/;
		if(reOPKIII.test(sequence)){
			i = 43;
			output1(reOPKIII.source,reOPKIII.exec(sequence).index+1);
		}		
	var reOPKIV = /HRD[VIM]K[GD][AD]N/;
		if(reOPKIV.test(sequence)){
			i = 44;
			output1(reOPKIV.source,reOPKIV.exec(sequence).index+1);
		}		
	var reOPKV = /x/;
		if(reOPKV.test(sequence)){i = 45;output();}
	var reOPKVI = /x/;
		if(reOPKVI.test(sequence)){i = 46;output();}
	var reOPKVII = /x/;
		if(reOPKVII.test(sequence)){i = 47;output();}
		
	var reOPKVIII = /RH.N[IVL][IVL]LFMG/;
		if(reOPKVIII.test(sequence)){
			i = 48;
			output1(reOPKVIII.source,reOPKVIII.exec(sequence).index+1);
		}		
	var reOPKIX = /HRD[IFL][KS]S[QKS]N/;
		if(reOPKIX.test(sequence)){
			i = 49;
			output1(reOPKIX.source,reOPKIX.exec(sequence).index+1);
		}		
	var reOPKX = /W..R..[ILVM]..G.A[KR]G/;
		if(reOPKX.test(sequence)){
			i = 50;
			output1(reOPKX.source,reOPKX.exec(sequence).index+1);
		}
		
	var reOPKXI = /LKITDFGLARE/;
		if(reOPKXI.test(sequence)){
			if (i!=0){groupType="";}
				i = 51;
				output1(reOPKXI.source,reOPKXI.exec(sequence).index+1);
		}
		
	var reOPKXII = /GPSLEDL/;
		if(reOPKXII.test(sequence)){
			i = 52;
			output1(reOPKXII.source,reOPKXII.exec(sequence).index+1);
		}		
		
	var reOPKXIII = /x/;
		if(reOPKXIII.test(sequence)){i = 53;output();}
	if (i==54){output();};

	function output(motif1, motif2,loc1,loc2){
		var out = groupType;
		groupType = out + typesArray[i] + "\nThe program characterised this kinase group by consensus sequence(s) " + "\n" + motif1 + " at " + loc1 + " and " + motif2 + " at " + loc2 + "\n\n";
		if(loc1 == null){
			groupType = out + typesArray[i];
		}
		return(groupType);
	}
	function output1(motif1,loc1){
		var out = groupType;
		groupType = out + typesArray[i] + "\nThe program characterised this kinase group by consensus sequence " + motif1 + " at " + loc1 + "\n\n";
		if(loc1 == null){
			groupType = out + typesArray[i];
		}
		return(groupType);
	}
	return(groupType);
}

function getInTouch() {
var content;
var newWindow =null;
	if (!newWindow || newWindow.closed) {
		newWindow = window.open("","newWindow","status,height=350,width=300,screenX=250,screenY=200");
	content = "<HTML><HEAD><TITLE>Let us fix it</TITLE></HEAD><BODY BGCOLOR=white>";
	content = content + "<P>The program searches for common kinase sequence consensus patterns.<P>If it won't accept your kinase sequence, paste it in an email and send it to us.<P>We can tweak the program or do the analysis manually.<P>Done as soon as possible.</P><CENTER><P><A HREF=mailto:n.saunders@uq.edu.au?subject=FindKinaseSubstrate>mail to</A></CENTER></P>";
	content = content + "<P><FORM><INPUT TYPE=  button  NAME=  newOne  VALUE=  Close  onClick=  window.close() ></FORM></P>";
	content = content + "</BODY></HTML>";
	newWindow.document.write(content);
	newWindow.document.close();
	}
	else{
		newWindow.focus();
	}
return;
}

function huhWindow() {
var content;
var newWindow =null;
	if (!newWindow || newWindow.closed) {
		newWindow = window.open("","newWindow","status,height=400,width=300,screenX=250,screenY=200,resizable");
	content = "<HTML><HEAD><TITLE>Kinase Type Help</TITLE></HEAD><BODY BGCOLOR=white>";
	content = content + "<P>Serine/threonine kinase is default type for don't know.</P><P>CMGC =<P><B>C</B>yclin dependent kinases,<P><B>M</B>AP kinases (but not MAPKK MAPKKK etc.)<P><B>G</B>lycogen synthase kinases,<P><B>C</B>asein kinase II. (not Casein kinase I)</P>";
	content = content + "<P><FORM><INPUT TYPE=  button  NAME=  newOne  VALUE=  Close  onClick=  window.close() ></FORM>";
	content = content + "</BODY></HTML>";
	newWindow.document.write(content);
	newWindow.document.close();
	}
	else{
		newWindow.focus();
	}
return;
}

