<!-- hide this script from non-javascript-enabled browsers
//
var kruisingtxt = "kruising.html";
var agreeHTML = "By using the functionality on this page including the advanced version You agree to the following:<BR>"+
"If any of your pictures that were already displayed on internet elsewhere show up on this page You must understand that<BR>"+
"the builder used these pictures for test purposes initially but hoped to get your permission by this question for continued usage.<BR>"+
"He became more brutal and now asks your permission on forehand to avoid legal issues. <BR>"+
"<B>You can use this webpage if we can view your pictures here. </B> It's for your fellow enthousiasts!<BR>"+
"Of course negotiations are possibly. Contact via henk69.nl<BR>"+
"This calculator is a non profit attempt to boost the animal genetics insight of breeders and other enthousiasts.<BR><BR>"+
"Bij gebruik van de onderdelen van deze pagina en de gevorderden versie stemt U toe met het volgende:<BR>"+
"Als uw foto's die elders op internet gepubliceerd zijn op deze pagina opduiken moet U begrijpen dat<BR>"+
"de programmeur deze in eerste instantie heeft gebruikt voor de test met de hoop ze permanent te mogen gebruiken.<BR>"+
"Hij is nu zo brutaal uw toestemming te vragen voor dat U gebruikt om wettelijke problemen te vermijden. <BR>"+
"<B>U mag deze calculator gebruiken als wij hier uw plaatjes mogen zien.</B> Bedenk dat het voor de hobbyisten is gemaakt!<BR>"+
"Tuurlijk is overleg mogelijk. Contact via henk69.nl<BR>"+
"Deze calculator is een niet commerciële poging om de genetica kennis van fokkers en hobbyisten te vergroten.";
//
var nonpublicHTML = "This is not a public webpage, as is the advanced version. Usage is confidential.<BR><BR>"+
"Deze webpagina, en de gevorderden versie, is niet publiek gemaakt. Gebruik is vertrouwelijk.";
var taal2 = "EN";
var select4latertxt = "Select for later crossings";
var gendertxt ="Gender";
var minimumtxt = "minimum of animals to breed";
var continuetxt = "Continue with this";
var ajout = "";
var Femaletxt = "Female";
var Maletxt = "Male";
var snpy ="Sorry, No Picture yet";
var pmsog="Pic may show opposite gender";
var Genotypestxt="Genotypes";
var Fenotypestxt="Phenotypes";
var Cockereltxt = "Hanen/Cockerels";
var Pullettxt   = "Hennen/Pullets";
//
var nfiy = "No function implemented yet...";
var picsize = 100;
var jpgpath = "kipkiezer_bestanden/";
var species = "gallus";
var listitems = new Array();
var listitems0 = new Array("Eloc","Co","Db","Pg","Ml","Cha","Mh","Di","Ig","Cb","Iloc","Bl","Lav","Cloc","Mo","Bloc","Sloc","Choc");
var listitems1 = new Array("Eloc","Co","DbPgMl","Cha","Mh","Di","Ig","Cb","Iloc","Bl","Lav","Cloc","Mo","Bloc","Sloc","Choc");
var listMdefs = new Array();
var listMdefs0 = new Array("e+/e+","co+/co+","db+/db+","pg+/pg+","ml+/ml+","Cha+/Cha+","mh+/mh+","di+/di+","Ig+/Ig+","cb+/cb+","i+/i+","bl+/bl+","Lav+/Lav+","C+/C+","Mo+/Mo+","b+/b+","s+/s+","Choc+/Choc+");
var listMdefs1 = new Array("e+/e+","co+/co+","db+-pg+-ml+/db+-pg+-ml+","Cha+/Cha+","mh+/mh+","di+/di+","Ig+/Ig+","cb+/cb+","i+/i+","bl+/bl+","Lav+/Lav+","C+/C+","Mo+/Mo+","b+/b+","s+/s+","Choc+/Choc+");
var listFdefs = new Array();
var listFdefs0 = new Array("e+/e+","co+/co+","db+/db+","pg+/pg+","ml+/ml+","Cha+/Cha+","mh+/mh+","di+/di+","Ig+/Ig+","cb+/cb+","i+/i+","bl+/bl+","Lav+/Lav+","C+/C+","Mo+/Mo+","b+/-","s+/-","Choc+/-");
var listFdefs1 = new Array("e+/e+","co+/co+","db+-pg+-ml+/db+-pg+-ml+","Cha+/Cha+","mh+/mh+","di+/di+","Ig+/Ig+","cb+/cb+","i+/i+","bl+/bl+","Lav+/Lav+","C+/C+","Mo+/Mo+","b+/-","s+/-","Choc+/-");
var listHets = new Array("-","-","-","-","-","-","-","-","-","-","+","+","-","-","-","-","+","-");
var nlwrds = "aziatisch patrijs;patrijs;koekoek;gepeld;zilver;goud;zwart;getekend;gezoomd;geloverd;porselein;tarwe;zalm;blauw;vuilwit;witgepareld;wit;"+
"getoept;slordig;vuil;-halzig;berken;bruin;parelgrijs;dubbel;rood;geel;citroen;geschouderd;isabel millefleur;bont;kwartel;uitgebreid;met minder halstekening;"+
"meerzomig;onbekend;chocolade;onvolledig;met messing;rug;geband;pel;recessief;gedobbeld;moorkop;columbia;creme";
//
var enwrds = "partridge/brown;duckwing;barred;transverse pencilled;silver;gold;black;patterned;laced;spangled;millefleur;wheaten;salmon;blue;splash;mottled;white;"+
"halfspangled;incomplete;incomplete;-necked;birchen;fawn;lavender;double;red;yellow/golden;lemon/cream;shouldered;porcelain;pied/mottled;quail;extended;clearnecked;"+
"multiple laced;unknown;chocolate;incomplete;brassy;back;transverse pencilled;quill;recessive;diced;blackhead;columbian;cream";
//
var dewrds = "rebhuhnfarbig;rebhuhnfarbig;gesperbert;gesprenkelt;silber;gold;schwarz;gezeichnet;gesäumt;lack;porzellanfarbig;weizenfarbig;lachsfarbig;blau;schmutzig weiss;gescheckt;weiss;"+
"halb lack;unvollständig;unvollständig;-halsig;birken;braun;perlgrau;doppel;rot;orange/gelb;gelb;geschultert;porzellanfarbig;gescheckt;wachtelfarbig;verbreitet;hellhalsig;"+
"mehrfach gesäumt;unbekannt;chocolade;unvollständig;messingfarbig;Rücken;gebändert;gesprenkelt;zurücktretend;gedoppelt;Mohrkopf;hermelin;rahmweiss";
//
var nlwrd = new Array();
var enwrd = new Array();
// always add to all 3 arrays
var patr1 = new Array("unicolor","berken","lakenvelder","kwartel","meerzomig","gezoomd","dubbel","geloverd","geband","gepeld","columbia","aziatisch","patrijs","tarwe","zalm","koekoek","getoept","porselein","bont");
var patr2 = new Array("uitgebreid","berken","lakenvelder","kwartel","meervoudiggezoomd","gezoomd","dubbel","geloverd","geband","pel","columbia","aziatisch","patrijs","tarwe","zalm","koekoek","geloverd","porselein","porselein");
var patfz = new Array("E:E/E","E:E^R/E^R","E:e^b/e^b,Co:Co/Co,S:S/S,Cha:cha/cha","E:e+/e+,Co:Co/Co,Ml:Ml/Ml","Pg:Pg/Pg","Pg:Pg/Pg,Co:Co/Co,Ml:Ml/Ml","Co:co+/co+","Db:Db/Db,Pg:Pg/Pg,Ml:Ml/Ml","E:"+
"E^R/E^R,Db:Db/Db,Pg:Pg/Pg","Db:Db/Db,Pg:Pg/Pg","Co:Co/Co","E:e^b/e^b","E:e+/e+","E:E^Wh/E^Wh","E:E^Wh/E^Wh,Mh:Mh/Mh,S:S/(S)","B:B/(B)","Db:Db/Db,Pg:Pg/Pg,Co:Co/Co,Ml:Ml/Ml","Co:Co/Co,Mo:mo/mo","Mo:mo/mo");
// always add to all 3 arrays
var verdun1 = new Array("zwart","blauw","parelgrijs","bruin","dun","chocolade","vuilwit","wit","smokey","khaki");
var verdun2 = new Array("zwart","blauw","parelgrijs","bruin","bruin","bruin","wit","wit","blauw","parelgrijs");
var verdunfz = new Array("Bl:bl+/bl+,I:i+/i+,Lav:Lav+/Lav+","Bl:Bl/bl+","Lav:lav/lav","I:I^d/i+","I:I^d/i+","I:I^d/i+","Bl:Bl/Bl","I:I/i+","I:I^s/I^s","I:I^d/I^d");
// always add to all 3 arrays
var grond1 = new Array("goud","zilver","geel","citroen","isabel","roodgeschouderd","rood","buff");
var grond2 = new Array("goud","zilver","geel","geel","geel","roodschouder","rood","goud");
var grfzM = new Array("S:s+/(s+)","S:S/(S)","Ig:ig/ig","Ig:ig/ig","Lav:lav/lav","S:S/(s+)","Mh:Mh/Mh","S:s+/(s+),Co:Co/Co,Mh:Mh/Mh,Di:Di/Di");
//22-06-2008
var fuzzX  = new Array("crele","aziatischpatrijs","partridge","crowwing","wildkleur","brown","lightbrown","bar","mottle","pied","exchequer","porcelain","jubilee","multiple","golden","vuilwit","copper","cream","lemon"); //brown light brown
var fuzzX2 = new Array("E:e+/e+,B:B/(B)","E:e^b/e^b","E:e^b/e^b","E:E^R/E^R","E:e+/e+,Ml:Ml/Ml","E:e^b/e^b","E:e+/e+","B:B/(B)","Mo:mo/mo","Mo:mo/mo","E:E/E,Mo:mo/mo","Co:Co/Co,Mo:mo/mo","E:E^Wh/E^Wh,Pg:Pg/Pg,Ml:Ml/Ml,Mh:Mh/Mh,I:I/i+","Co:co+/co+,Ml:ml+/ml+","Ig:Ig+/Ig+,S:S/(s+)","I:i+/i+","E:E^R/E^R,Mh:Mh/Mh","Ig:ig/ig","Ig:ig/ig");
//The parent genotypes
var gm="";
var gf="";
//bugfix if multiple alleles per gene to keep everything e.g. E/E^R instead of intermittent E^R/E...
var Alleles0 = new Array();
var Alleles0Super = new Array();
var Alleles1 = new Array("E","E^R","E^Wh","e+","e^b","I","I^s","I^d","i+","Db-Pg-Ml","Db-Pg-ml+","Db-pg+-Ml","Db-pg+-ml+","db+-Pg-Ml","db+-Pg-ml+","db+-pg+-Ml","db+-pg+-ml+");
var Alleles1Super = new Array("E^R","E^Wh","e^b","I^s","I^d");
//extern javascript conversion
var Result1innerHTML = "";
var Result2innerHTML = "";
//Extern; Hoofdprocedure; aanroep met volledige genotypes geen : geen ()
function Kruising(m,f,hidegtchecked,psynclabel)
{
	//20-06-2008
	//document.body.style.cursor = 'wait'; //default
	var synclabel = "";
	if(psynclabel != null) synclabel = psynclabel;
	var l_arr = 0;
	//
	var ResultArray = new Array();
	//
	var MArr = new Array();
	var FArr = new Array();
	var RArr = new Array();
	var F1Arr = new Array();
	var ZArr = new Array();
	var Alleles = new Array();
	Alleles = Alleles0;
	//
	var acnt =0;
	//Step 1 read input parents
	//read male genotype
	var Msplit = new Array();
	Msplit = m.split(',');
	for(i=0;i < Msplit.length; i++)
	{			
	    acnt=0;
		var chr=Msplit[i];
		for(j=0;j<2;j+=1)
		{
			var a = chr.split('/')[j];
			acnt+=1;
			if(ArrayListContains(a,Alleles))
			{}
			else
			{
				Alleles[Alleles.length]=a;
			}			
			if(a=="-")
			{
				ZArr[ZArr.length]=i;
			}
		}
		if(acnt==1)
		{
			MArr[MArr.length]=chr+"/"+"-";
			ZArr[ZArr.length]=i;
		}
		else
		{
			MArr[MArr.length]=chr;
		}	
	}		
	acnt=0;	
	//read female genotype
	var Fsplit = new Array();
	Fsplit = f.split(',');
	for(ib=0;ib<Fsplit.length;ib++)
	{
		acnt=0;
		var chr=Fsplit[ib];
		for(j=0;j<2;j++)
		{
			var a = chr.split('/')[j];
			acnt+=1;
			if(ArrayListContains(a,Alleles))
			{}
			else
			{
				Alleles[Alleles.length]=a;
			}	
			if(a=="-")
			{
				ZArr[ZArr.length]=ib;
			}
		}		
		if(acnt==1)
		{
			FArr[FArr.length]=chr+"/"+"-";
			ZArr[ZArr.length]=ib;
		}
		else
		{
			FArr[FArr.length]=chr;
		}
	}
	//Step 2 a Recombine per locus
	for (ic = 0; ic < MArr.length; ic++)
	{	
		for(ii=0;ii<2;ii+=1)
		{
			var a = MArr[ic].split('/')[ii];			
			for(iii=0;iii<2;iii++)
			{
				var b = FArr[ic].split('/')[iii];
				//moved reorder to here
				if ( switchAlleles(a,b,Alleles) ) //multiple non wildtype alleles with capital eg E, E^R,E^Wh
				{
					RArr[RArr.length]=b+"/"+a;
				}
				else
				{
					RArr[RArr.length]=a+"/"+b;
				}
			}
		}
	}	
	var loci = 0;	
	//Step 2 b Recombine to genotype
	//First locus; at least 4 combinations possible per locus
	if(RArr[0]==RArr[1] && RArr[0]==RArr[2] && RArr[0]==RArr[3])//final array will be 1/4 size!
	{
		F1Arr[F1Arr.length]=RArr[0];
	}
	else if(RArr[0]==RArr[1] && RArr[2]==RArr[3])//final array will be 1/2 size!
	{
		F1Arr[F1Arr.length]=RArr[0];
		F1Arr[F1Arr.length]=RArr[2];
	}
	else if(RArr[0]==RArr[2] && RArr[1]==RArr[3])//final array will be 1/2 size!
	{
		F1Arr[F1Arr.length]=RArr[0];
		F1Arr[F1Arr.length]=RArr[1];
	}
	else if(RArr[0]==RArr[3] && RArr[1]==RArr[2])//final array will be 1/2 size!
	{
		F1Arr[F1Arr.length]=RArr[0];
		F1Arr[F1Arr.length]=RArr[1];
	}
	else
	{
		F1Arr[F1Arr.length]=RArr[0];
		F1Arr[F1Arr.length]=RArr[1];
		F1Arr[F1Arr.length]=RArr[2];
		F1Arr[F1Arr.length]=RArr[3];
		loci+=1;
	}
	//Combine with other loci 
	for (r = 1; r < (RArr.length)/4;r++)
	{
		var TArr = new Array();
		var PArr = new Array();
		PArr = F1Arr;
		//see comment first locus
		if(RArr[(4*r)]==RArr[(4*r)+1] && RArr[(4*r)]==RArr[(4*r)+2] && RArr[(4*r)]==RArr[(4*r)+3])
		{
			TArr[TArr.length]=RArr[(4*r)];
		}
		else if(RArr[(4*r)]==RArr[(4*r)+1] && RArr[(4*r)+2]==RArr[(4*r)+3])
		{
			TArr[TArr.length]=RArr[(4*r)];
			TArr[TArr.length]=RArr[(4*r)+2];
		}
		else if(RArr[(4*r)]==RArr[(4*r)+2] && RArr[(4*r)+1]==RArr[(4*r)+3])
		{
			TArr[TArr.length]=RArr[(4*r)];
			TArr[TArr.length]=RArr[(4*r)+1];
		}
		else if(RArr[(4*r)]==RArr[(4*r)+3] && RArr[(4*r)+1]==RArr[(4*r)+2])
		{
			TArr[TArr.length]=RArr[(4*r)];
			TArr[TArr.length]=RArr[(4*r)+1];
		}
		else
		{
		TArr[TArr.length]=RArr[(4*r)];
		TArr[TArr.length]=RArr[(4*r)+1];
		TArr[TArr.length]=RArr[(4*r)+2];
		TArr[TArr.length]=RArr[(4*r)+3];
		loci+=1;
		}
		//Aanroep sleutelprocedure die de combinaties van alle loci-combinaties maakt; wordt exponentieel groter. (Clue function)
		F1Arr = ArrayExtend(PArr,TArr);			
	}
	//Count combinations
	//Illegal combinations: don't copy
	var minZ = ZArr[0];
	var maxZ = ZArr[ZArr.length-1];
	//
	var F1ArrCopy = new Array();
	l_arr = F1Arr.length; //20-06-2008
	F1Arr.sort();
	var last_illegal = "";
	var last_legal   = "";
	var copythis="1";	
	for(r = 0; r < l_arr; r++)
	{
		//20-06-2008
		if(l_arr > 10000 && r%1000==0 && synclabel!="") {document.getElementById(synclabel).innerHTML = "PROGRESS: Step 3 / 7 Removing illegal genotypes "+r+" / "+l_arr;}
		//
		copythis="1";
		if(F1Arr[r]==last_illegal)
		{
			copythis="0";
		}
		else if(F1Arr[r]==last_legal)
		{
			copythis="1";
		}
		else
		{
			var sx = ""; //sexlink f or m
			var F1Arrsplit = new Array();
			F1Arrsplit = F1Arr[r].split(',');
			for(im=minZ;im<=maxZ;im++)
			{
				var g = F1Arrsplit[im];
				var gt0 = g.split('/')[0]; 
				var gt1 = g.split('/')[1];
				var gti0 = gt0.substring(0,1);
				var gti1 = gt1.substring(0,1);
				if(ArrayListContains(im,ZArr))
				{
					if(sx=="" && (gti1=="-" || gti0=="-"))
					{
					}
					else if(sx=="" && (gti1!="-" && gti0!="-"))
					{
						sx="m";
					}
					if(sx=="m" && GenAanwezig("-",F1Arr[r])>0)
					{
						copythis="0";
						last_illegal = F1Arr[r];//20-06-2008
						break;
					}
				}						
			}
		}
		if (copythis=="1")
		{
			F1ArrCopy[F1ArrCopy.length]=F1Arr[r];
			last_legal = F1Arr[r];//20-06-2008
		}
	}
	//
	F1Arr = F1ArrCopy;
	F1Arr.sort();	//20-06-2008
	//Count and Filter double genotypes
	var GTcnt = new Array();//GenoTypeCount
	var F1ArrFiltered = new Array();
	var s_prev = "";//20-06-2008
	l_arr = F1Arr.length;//20-06-2008
	for(r = 0; r < l_arr; r++)
	{
		var s = F1Arr[r];
		var c = 1;	
		if(s==s_prev) //20-06-2008 // || ArrayListContains(s,F1ArrFiltered))//Not in filtered array yet
		{}
		else
		{	
			//20-06-2008
			if(l_arr > 10000 && r%1000==0 && synclabel!="") {document.getElementById(synclabel).innerHTML = "PROGRESS: Step 4 /7 Filtering genotypes "+r+" / "+l_arr;}
			//
			for(id = r+1; id < l_arr; id++)
			{			
				if(s==F1Arr[id])
				{
					c+=1;
				}
				else {break;} //20-06-2008
			}	        					
			F1ArrFiltered[F1ArrFiltered.length]=s;
			GTcnt[GTcnt.length]=c;
		}
		s_prev = s;//20-06-2008
	}
	//print genotypes
	var p1 = "";
	var p3 = "";
	var p2 = "";
	var p4 = "";
	var p5 = "";
	var mf = " ";
	var p  = "";
	var p6 = "";
	l_arr = F1ArrFiltered.length;//21-06-2008
	//
	var KleurArr = new Array();
	for(r = 0; r < l_arr; r++)
	{
		//21-06-2008
		if(l_arr > 1000 && r%100==0 && synclabel!="") {document.getElementById(synclabel).innerHTML = "PROGRESS: Step 5 / 7 Processing genotypes "+r+" / "+l_arr;}
		//
		mf = Maletxt;
		p1 =F1ArrFiltered[r];
		ajout1 = "";
		if(GenAanwezig("-",p1)>0)
		{
			mf = Femaletxt;
			ajout1 = ajout;
		}				
		p2 =GetKleur(p1);
		KleurArr[r]=new Array(mf.substring(0,1)+ " " + p2,GTcnt[r]); //20-06-2008
		if(hidegtchecked == "0")
		{
			p3 =gendertxt+" = "+mf+", Ratio = "+
				(GTcnt[r]+"/"+F1Arr.length)+" = "+
				GetPercentage(GTcnt[r],F1Arr.length)+"%, "+minimumtxt+": "+
				Math.ceil(F1Arr.length/GTcnt[r]);
			p4 =VertaalKleur(p2);
			p5 =GetPlaatje(p2,mf.substring(0,1));
			p6 ="<A href=javascript:setLists0('"+mf.substring(0,1)+"','"+p1+"')>"+continuetxt+ajout1+" "+mf+"</A> | <A href=javascript:select4later('"+mf.substring(0,1)+"','"+p1+"')>"+select4latertxt+"</A>";
			p+="<TR><TD><A href='"+p5+"' target=_blank ><img src="+p5+" alt='"+snpy+"' title='"+pmsog+": "+p5+"'  width="+picsize+" /></A>"+"</TD><TD>"+MockUpGT(p1)+"<BR>"+p3+"<BR><B>"+p2+" | "+p4+"</B><BR>"+p6+"<BR></TD></TR>";
			ResultArray[ResultArray.length]="GENOTYPE;"+mf.substring(0,1)+";"+p1+";"+p3+";"+p2+";"+p4+";"+p5;
		}
	}
	if(hidegtchecked == "0")
	{
		Result1innerHTML = "<B>"+Genotypestxt+":</B><BR><TABLE>"+p+"</TABLE><BR><BR>";
	}
	else
	{
		Result1innerHTML = "";	
	}	
	//species not gallus
	if(species.toLowerCase()!="gallus")
	{
		return ResultArray;
	}
	//Deel 2: alleen kleuren geen genotypes verwerken
	var ResKl = new Array();
	var ResCnt = new Array();
	var k_curr = "";//20-06-2008
	var k_prev = "";//20-06-2008
	KleurArr.sort();//20-06-2008
	l_arr = KleurArr.length;//20-06-2008
	var cnt1 = 0;
	for(zz=0;zz<l_arr;zz++)
	{
		k_curr = KleurArr[zz][0];
		if(k_prev==k_curr) //20-06-2008 //ArrayListContains(KleurArr[zz][0],ResKl))
		{}
		else
		{
			//20-06-2008
			if(l_arr > 4000 && zz%1000==0 && synclabel!="") {document.getElementById(synclabel).innerHTML = "PROGRESS: Step 6 / 7 Filtering fenotypes "+zz+" / "+l_arr;}
			//
			cnt1 = KleurArr[zz][1];
			for(z=zz+1;z<l_arr;z++)
			{
				if(k_curr==KleurArr[z][0])
				{
						cnt1+=KleurArr[z][1];
				}
				else {break;} //20-06-2008
			}
			ResKl[ResKl.length]=k_curr;
			ResCnt[ResCnt.length]=cnt1;
		}
		k_prev = k_curr;//20-06-2008
	}
	//print fenotypes
	p = "";
	var p7 = "";
	l_arr  = ResKl.length;
	for(rz = 0; rz < l_arr; rz++)
	{	
		//20-06-2008
		if(l_arr > 1000 && rz%100==0 && synclabel!="") {document.getElementById(synclabel).innerHTML = "PROGRESS: Step 7 / 7 Processing fenotypes "+rz+" / "+l_arr;}
		//
		p3 ="Ratio = "+
			(ResCnt[rz]+"/"+F1Arr.length)+" = "+
			GetPercentage(ResCnt[rz],F1Arr.length)+"%, "+minimumtxt+": "+
			Math.ceil(F1Arr.length/ResCnt[rz]);
		p2 =ResKl[rz];
		p4 =VertaalKleur(p2.substring(2));
		p5 =GetPlaatje(p2.substring(2), p2.substring(0,1));
		//show gender
		if(p2.substring(0,1)=="M")
		{
			p7 = Cockereltxt+": ";
		}
		else if(p2.substring(0,1)=="F")
		{
			p7 = Pullettxt+": ";
		}
		else
		{
			p7 = "";
		}
		p+="<TR><TD><A href='"+p5+"' target=_blank ><img src="+p5+" alt='"+snpy+"' title='"+pmsog+": "+p5+"'  width="+picsize+" /></A>"+"</TD><TD>"+p7+"<BR><B>"+(p2.substring(2))+" ("+p4+")"+"</B><BR>"+p3+"<BR></TD></TR>";
		ResultArray[ResultArray.length]="FENOTYPE;"+p2.substring(0,1)+";;"+p7+p3+";"+p2.substring(2)+";"+p4+";"+p5;
	}
	Result2innerHTML = "<B>"+Fenotypestxt+":</B><BR><TABLE>"+p+"</TABLE>";
	return ResultArray;
  }//end main()
  //extern
  function GetPlaatje()
  {
	//29-06-2008
	if(species.toLowerCase()!="gallus")
	{
		return "";
	}
    var knl = GetPlaatje.arguments[0];
	var mf  = GetPlaatje.arguments[1];
	var jpg  = "";
	var zwv  = "";
	var gzf  = "";
	var ptr  = "";
	
	for(gp1=0;gp1<patr1.length;gp1++)
	{
		if (knl.indexOf(patr1[gp1])>=0)
		{
			ptr += patr2[gp1];
		}
	}		
	
	for(gp2=0;gp2<grond1.length;gp2++)
	{
		if (knl.indexOf(grond1[gp2])>=0)
		{
			gzf = grond2[gp2];
			break;
		}
	}
	
	for(gp=0;gp<verdun1.length;gp++)
	{
		if (knl.indexOf(verdun1[gp])>=0)
		{
			zwv = verdun2[gp];
			if(zwv=="wit" && gzf.indexOf("zilver")>=0 && !(mf=="F" &&( ptr.replace("meervoudiggezoomdpatrijs","").replace("aziatischpatrijs","").indexOf("patrijs")>=0 || ptr.indexOf("tarwe")>=0)))
			{				
				gzf = "uitgebreid"; //NB wit patrijs tarwe zalm
			}
			break;
		}
	}
	
	if(zwv=="wit" && gzf=="uitgebreid")
	{
		ptr = "";
	}
	else if(zwv=="wit" && ptr.indexOf("uitgebreid")>=0 && ptr.indexOf("porselein")<0)
	{
		ptr = "uitgebreid";
	}
	//geband vs gepeld
	if(ptr.indexOf("pel")>=0 && mf=="M")
	{
		ptr = ptr.replace("pel","columbia");
	}
	else if(ptr.indexOf("geband")>=0 )
	{
		ptr = ptr.replace("geband","pel");
	}
	else if(ptr.indexOf("meervoudiggezoomd")>=0 && ptr.indexOf("patrijs")>=0 && mf=="M") //pseudo gender keuze
	{
	    ptr = ptr.replace("aziatisch","").replace("meervoudiggezoomd","");
		mf = "";
	}
	else if(ptr.indexOf("meervoudiggezoomd")>=0 && ptr.indexOf("patrijs")>=0)
	{
		ptr=ptr.replace("aziatisch","").replace("patrijs","");
		mf = "";
	}
	else if(ptr.indexOf("aziatisch")>=0 && mf=="M")
	{
		ptr=ptr.replace("aziatisch","");
		mf = "";
	}
	else if(ptr.indexOf("tarwe")>=0 && mf=="M")
	{
		ptr=ptr.replace("tarwe","patrijs");
		mf = "";
	}
	//roodschouderhennen
	if(gzf.indexOf("roodschouder")>=0 && mf=="F")
	{
		gzf=gzf.replace("roodschouder","zilver");
	}
	//koekoekpatrijs=koekoek
	if(ptr.indexOf("koekoek")>=0 && ptr.indexOf("patrijs")>=0)
	{
		ptr=ptr.replace("patrijs","");
	}
	//when gender sppecific jpg?
	if( mf=="M" && (ptr=="pel" || ptr=="geloverd" || ptr=="uitgebreid" || ptr=="uitgebreidkoekoek" || ptr=="uitgebreidporselein" || ptr=="columbia" || ptr=="porselein" || ptr=="kwartel" || ptr=="lakenvelder" || ptr=="columbiakoekoek" || ptr=="gezoomddubbel" || ptr=="gezoomd" || ptr=="uitgebreidgezoomd"))
	{} //use mf
	else if(zwv=="wit" && (gzf+ptr)=="uitgebreid" )
	{} //use mf both genders
	else if(mf=="F" && (ptr=="patrijs" || ptr=="tarwe" || ptr=="zalm" || ptr=="berken" || ptr=="aziatischpatrijs" || ptr=="berkenkoekoek" || ptr=="patrijsporselein" || ptr=="tarweporselein" || ptr=="zalmporselein" || ptr=="aziatischpatrijsporselein" || ptr=="koekoek" || ptr=="tarwekoekoek" || ptr=="zalmkoekoek" || ptr=="aziatischkoekoek" || ptr=="berkenporselein" || ptr=="gezoomdporselein" || ptr=="pelkoekoek"))
	{}
	else
	{
		mf = "";
	}
	//
	jpg = mf+zwv+gzf+ptr;
	//alert(jpg);
    return jpgpath+jpg+".JPG";
  }
  //intern
  function GetFuzzy(kleur,mf)
  {
    var gt   = "";	
	for(gp1=0;gp1<patr1.length;gp1++)
	{
		if (kleur.indexOf(patr1[gp1])>=0 || kleur.indexOf(VertaalKleur(patr1[gp1]))>=0)
		{
			gt += patfz[gp1]+",";
		}
	}
	for(gp2=0;gp2<grond1.length;gp2++)
	{
		if (kleur.indexOf(grond1[gp2])>=0 || kleur.indexOf(VertaalKleur(grond1[gp2]))>=0 )
		{				
			gt += grfzM[gp2]+",";
		}
	}
	for(gp=0;gp<verdun1.length;gp++)
	{
		if (kleur.indexOf(verdun1[gp])>=0 || kleur.indexOf(VertaalKleur(verdun1[gp]))>=0)
		{
			gt += verdunfz[gp]+",";			
		}
	}
	for(gx=0;gx<fuzzX.length;gx++)
	{
		if (kleur.indexOf(fuzzX[gx])>=0)
		{
			gt += fuzzX2[gx]+",";
			//break;
		}
	}
	//
	if(gt!="")
	{
		gt+=",";
		gt = gt.replace(",,","");
	}
    return gt;
  }
//show fuzzy
  function ShowFuzzy()
  {
    var gt   = "<TR><TD>NL WORD</TD><TD>EN WORD</TD><TD>GENOTYPE EXACT MATCH</TD><TD>ALL FUZZY MATCHES FROM NL WORD</TD><TD>ALL FUZZY MATCHES FROM EN WORD</TD></TR>";	
	var tmp  = "";
	for(gp11=0;gp11<grond1.length;gp11++)
	{
		tmp = grond1[gp11];
		gt += "<TR><TD>"+tmp+"</TD><TD>"+VertaalKleur(tmp)+"</TD><TD>"+grfzM[gp11]+"</TD><TD>"+GetFuzzy(tmp)+"</TD><TD>"+GetFuzzy(VertaalKleur(tmp))+"</TD></TR>";
	}
	for(gp12=0;gp12<verdun1.length;gp12++)
	{
		tmp = verdun1[gp12];
		gt += "<TR><TD>"+tmp+"</TD><TD>"+VertaalKleur(tmp)+"</TD><TD>"+verdunfz[gp12]+"</TD><TD>"+GetFuzzy(tmp)+"</TD><TD>"+GetFuzzy(VertaalKleur(tmp))+"</TD></TR>";
	}
	for(gp13=0;gp13<patr1.length;gp13++)
	{
		tmp = patr1[gp13];
		gt += "<TR><TD>"+tmp+"</TD><TD>"+VertaalKleur(tmp)+"</TD><TD>"+patfz[gp13]+"</TD><TD>"+GetFuzzy(tmp)+"</TD><TD>"+GetFuzzy(VertaalKleur(tmp))+"</TD></TR>";
	}
	gt   += "<TR><TD>TER CORRECTIE</TD><TD>CORRECTIONAL</TD><TD></TD><TD></TD><TD></TD></TR>";	
	for(gp14=0;gp14<fuzzX.length;gp14++)
	{
		tmp = fuzzX[gp14];
		gt += "<TR><TD>"+tmp+"</TD><TD></TD><TD>"+fuzzX2[gp14]+"</TD><TD>"+GetFuzzy(tmp)+"</TD><TD></TD></TR>";
	}
	//
    return "<TABLE>"+gt+"</TABLE>";
  }  
  //extern
  function VertaalKleur()
  {
	var kl = VertaalKleur.arguments[0];
	if(taal2=="FR" || taal2=="IT") return VertaalKleurFra(kl);
	for(ikl=0;ikl<nlwrd.length;ikl++)
	{
		kl = kl.replace(nlwrd[ikl],enwrd[ikl]);
	}
	return kl;
  }
  //intern
  function ArrayExtend()
	{
		var Arr1 = new Array();
		Arr1 = ArrayExtend.arguments[0];
		var Arr2 = new Array();
		Arr2 = ArrayExtend.arguments[1];
		var Arr = new Array();
		
		for(ig = 0; ig< Arr1.length;ig+=1)
		{			
			for(jg = 0; jg<Arr2.length;jg+=1)
			{				
				Arr[Arr.length]=Arr1[ig]+","+Arr2[jg];
			}
		}	
		return Arr;
	}
//intern
function ArrayListContains()
  {
    var value = ArrayListContains.arguments[0];
	var Arr = new Array();
	Arr = ArrayListContains.arguments[1];
    for(ia = 0; ia < Arr.length;ia++)
	{
		if(value==Arr[ia])
		{
			return true;
		}
	}
	return false;
  }
//intern
function GetArrayListIndexByValue()
  {
	var value = GetArrayListIndexByValue.arguments[0];
	var Arr = new Array();
	Arr = GetArrayListIndexByValue.arguments[1];
	for(ig = 0; ig < Arr.length;ig++)
	{
		if(value==Arr[ig])
		{
			return ig;
		}
	}
	return 999999999;
  }
//intern
function GetPercentage()
  {
	var teller = GetPercentage.arguments[0];
	var noemer = GetPercentage.arguments[1];
	var teller1=teller;
	var noemer1=noemer;
	
	if (teller==0) return teller1;
	else
	{
		return (teller1/noemer1)*100;
	}	
  }
//extern
function GetKleur()
  {
    if(species.toLowerCase()!="gallus")
	{
		return "onbekend";
	}
	var genotype=GetKleur.arguments[0];
	var zwartverdunner="zwart";
	var grondkleur="goud";
	var patroon="patrijs";
	var patroon2="";
	//recessief wit
	if(GenAanwezig("c",genotype)==2 )
	{
		return "wit unicolor";
	}
	//grondkleur
	if(GenAanwezig("s+",genotype)>=1 && GenAanwezig("S",genotype)==0)
	{
		grondkleur = "goud";
		if(GenAanwezig("ig",genotype)==2 || GenAanwezig("Di",genotype)>=1 || GenAanwezig("Cb",genotype)>=1)
		{
			grondkleur = "citroen";
		}
	}
	else if(GenAanwezig("s+",genotype)==1 && GenAanwezig("S",genotype)==1)
	{
		grondkleur = "geel";
	}
	else if(GenAanwezig("S",genotype)>=1)
	{
		grondkleur = "zilver";
	}
	else
	{
		grondkleur = "goud";
	}
	//zwartverdunning: I,I^d,lav,Bl,choc nog niet: I^s
	if(GenAanwezig("I",genotype)>0 && GenAanwezig("I^s",genotype)==0)
	{
		zwartverdunner = "wit";
	}
	else if(GenAanwezig("lav",genotype)==2 && GenAanwezig("Bl",genotype)==2)
	{
		zwartverdunner = "vuilwit?";
		//grondkleur     = "isabel";
	}	
	else if(GenAanwezig("Bl",genotype)==2) //
	{
		zwartverdunner = "vuilwit";
	}	
	else if(GenAanwezig("lav",genotype)==2)
	{
		zwartverdunner = "parelgrijs";
		//grondkleur     = "isabel";
	}
	else if((GenAanwezig("I",genotype)==1 && GenAanwezig("I^s",genotype)==1) || GenAanwezig("I^s",genotype)==2)
	{
		zwartverdunner = "smokey";
	}	
	else if(GenAanwezig("I",genotype)==0 && GenAanwezig("I^d",genotype)==0 && GenAanwezig("lav",genotype)<2)
	{
	    if(GenAanwezig("Bl",genotype)==1)
	    {
			zwartverdunner = "blauw";
	    }
	    else if(GenAanwezig("Bl",genotype)==2) //moved up also
	    {
			zwartverdunner = "vuilwit";
	    }
	    if(GenAanwezig("choc",genotype)>=1 && GenAanwezig("Choc+",genotype)==0)
		{
			zwartverdunner = "chocolade";
		}
	}
	else if(GenAanwezig("I^d",genotype)==1 && GenAanwezig("Bl",genotype)==1)
	{
		zwartverdunner = "khaki?";
	}
	else if(GenAanwezig("I^d",genotype)==1)
	{
		zwartverdunner = "bruin/dun";
	}
	else if (GenAanwezig("I^d",genotype)==2)
	{
		zwartverdunner = "khaki";
	}

	//andere patronen
	if(GenAanwezig("B",genotype)>=1 )
	{
		patroon2 += " koekoek";
	}
	if(GenAanwezig("mo",genotype)==2 )
	{
		patroon2 += " bont";
	}	
	//E-locus
	if(GenAanwezig("E",genotype)>0)
	{
		if(GenAanwezig("Pg",genotype)==2 && zwartverdunner!="zwart" && zwartverdunner.indexOf("wit")<0)
		{
			patroon2 += " gezoomd";
		}
		patroon2=" unicolor"+patroon2;		
		return zwartverdunner+patroon2;
	}
	else if(GenAanwezig("E^R",genotype)>0)
	{
		patroon = "-halzig/berken";
	}
	else if(GenAanwezig("E^R",genotype)==0 && GenAanwezig("e+",genotype)>0)
	{
		patroon = "patrijs";
	}
	else if(GenAanwezig("E^R",genotype)==0 && GenAanwezig("E^Wh",genotype)>0)
	{
		patroon = "tarwe";
	}
	else if(GenAanwezig("e^b",genotype)==2)
	{
		patroon = "aziatisch patrijs";
	}
	//patroon override
	if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==2 && GenAanwezig("E^R",genotype)>=1)
	{
		patroon = "gezoomd";
	}	
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==2)
	{
		patroon = "getoept";
	}	
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==2 && GenAanwezig("e^b",genotype)==2)
	{
		patroon = "gezoomd";
	}
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)==1 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==2 && GenAanwezig("e^b",genotype)==2)
	{
		patroon = "(onvolledig) gezoomd"; //
	}
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==1 && GenAanwezig("Co",genotype)==2 && GenAanwezig("e^b",genotype)==2)
	{
		patroon = "(onvolledig) gezoomd"; //
	}
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==2 && GenAanwezig("E^R",genotype)==0)
	{
		patroon = "(onvolledig) gezoomd";
	}
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)>=1 && GenAanwezig("Ml",genotype)>=1 && GenAanwezig("Co",genotype)>=1 && GenAanwezig("E^R",genotype)==0)
	{
		patroon = "onvolledig gezoomd"; //
	}	
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==0 && GenAanwezig("E^R",genotype)==0 && GenAanwezig("e+",genotype)==0)
	{
		patroon = "dubbelgezoomd";
	}
	else if(GenAanwezig("Db",genotype)==0 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2 && GenAanwezig("Co",genotype)==0 && GenAanwezig("E^R",genotype)==0)
	{
		patroon = "(onvolledig) dubbelgezoomd";
	}	
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("Ml",genotype)==2)
	{
		patroon = "geloverd";
	}
	else if(GenAanwezig("Db",genotype)>=1 && GenAanwezig("Pg",genotype)>=1 && GenAanwezig("Ml",genotype)>=1)
	{
		//23-7-2008
		if(GenAanwezig("-",genotype)==0 && GenAanwezig("E^R",genotype)==0 && GenAanwezig("e^b",genotype)==0)
		{
			patroon = "columbia?";//The "?" prevents turn to kwartel/quail by melanizer
		}
		else
		{
			patroon = "onvolledig geloverd";
		}
	}
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==0 && GenAanwezig("Ml",genotype)>=1 && GenAanwezig("Co",genotype)==0 && GenAanwezig("E^R",genotype)>=1)
	{
		patroon = "onvolledig columbia/gedobbeld?";
	}
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==2 && GenAanwezig("E^R",genotype)>=1)
	{
		patroon = "geband";
	}
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==2)
	{
		patroon = "gepeld";
	}
	else if(GenAanwezig("Db",genotype)>=1 && GenAanwezig("Pg",genotype)>=1 && GenAanwezig("E^R",genotype)>=1)
	{
		patroon = "slordig geband";
	}
	else if(GenAanwezig("Db",genotype)>=1 && GenAanwezig("Pg",genotype)>=1)
	{
		patroon = "slordig gepeld";
	}
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Pg",genotype)==0 && GenAanwezig("-",genotype)==0)
	{
		patroon = "columbia met minder halstekening";
	}
	else if(GenAanwezig("Db",genotype)>=1)
	{
		patroon = "(onvolledig) columbia met minder halstekening";
	}
	else if(GenAanwezig("Co",genotype)==2 && GenAanwezig("E^R",genotype)==0)
	{
		patroon = "columbia";
	}
	else if(GenAanwezig("Co",genotype)==1 && GenAanwezig("E^R",genotype)==0 && GenAanwezig("-",genotype)==0)
	{
		patroon = "columbia";
	}
	else if(GenAanwezig("Co",genotype)==1 && GenAanwezig("E^R",genotype)==0 && GenAanwezig("-",genotype)>0)
	{
		patroon = "vuil-columbia";
	}
	else if(GenAanwezig("Pg",genotype)==2 && patroon.indexOf("patrijs")>=0)
	{
		patroon = "meerzomig "+patroon; //.replace("aziatisch","");
	}
	else if (patroon=="")
	{
		patroon = "(onbekend)";
	}
	//melanizers
	if(patroon == "columbia" && GenAanwezig("Co",genotype)==2 && GenAanwezig("e^b",genotype)==2 && GenAanwezig("cha",genotype)==2)
	{
		patroon = "lakenvelder";
	}
	else if(GenAanwezig("Db",genotype)==2 && GenAanwezig("Co",genotype)==2 && GenAanwezig("cha",genotype)==2)
	{
		patroon = "moorkop "+patroon;
	}
	else if(patroon=="columbia" && GenAanwezig("E^R",genotype)==0 && (GenAanwezig("cha",genotype)==2 || GenAanwezig("Ml",genotype)>=1))
	{
		patroon = "kwartel";
	}
	else if(patroon.indexOf("columbia")>=0 && GenAanwezig("E^R",genotype)==0 && (GenAanwezig("cha",genotype)==2 || GenAanwezig("Ml",genotype)>=1)  && patroon.indexOf("columbia?")<0 )
	{
		patroon = "onvolledig kwartel";
	}
	else if(GenAanwezig("cha",genotype)==2 && GenAanwezig("Ml",genotype)==0 && patroon == "-halzig/berken" && GenAanwezig("-",genotype)==0)
	{
		zwartverdunner = "uitgebreid "+zwartverdunner;
		if(grondkleur=="goud")
		{
			patroon = "met messing rug";
		}
		else
		{
			patroon = grondkleur+" rug";
		}
		grondkleur = "";
	}
	else if((GenAanwezig("cha",genotype)==2 || GenAanwezig("Ml",genotype)>=1) && patroon == "-halzig/berken")
	{
		zwartverdunner = "uitgebreid "+zwartverdunner;
		patroon = "unicolor";
		grondkleur = "";
	}
	else if(GenAanwezig("cha",genotype)==2 || (GenAanwezig("Ml",genotype)>=1 && !(patroon.indexOf("geloverd")>=0 || patroon.indexOf("gezoomd")>=0 || patroon.indexOf("kwartel")>=0 || patroon.indexOf("columbia?")>=0)))
	{
		zwartverdunner = "uitgebreid "+zwartverdunner;
	}
	//porselein
	if(patroon.indexOf("columbia")>=0 && GenAanwezig("mo",genotype)==2)
	{
		patroon  = patroon.replace("columbia","porselein");
		patroon2 = patroon2.replace(" bont"," ");
	}
	else if(patroon.indexOf("geloverd")>=0 && GenAanwezig("mo",genotype)==2)
	{
		patroon  = patroon.replace("geloverd","porselein");
		patroon2 = patroon2.replace(" bont"," ");
	}
	//roodversterkers
	if(GenAanwezig("Mh",genotype)>=1 && grondkleur!="citroen" && GenAanwezig("Di",genotype)==0)
	{
		if(grondkleur=="goud")
		{
			grondkleur = "rood";
		}
		else if (grondkleur=="zilver" && patroon.indexOf("tarwe")>=0)
		{
			patroon = patroon.replace("tarwe","zalm");
			grondkleur = "";
		}
		else if (grondkleur=="zilver")
		{
			grondkleur = "roodgeschouderd/creme";
		}
	}
	else if(GenAanwezig("Mh",genotype)>=1 && grondkleur=="citroen")
	{
			grondkleur = "buff";
	}	
	if(GenAanwezig("lav",genotype)==2)
	{
		if(grondkleur=="goud") grondkleur = "isabel";
		else if (grondkleur=="rood") grondkleur = "buff";
		//grondkleur     = "isabel";
	}
	return zwartverdunner+" getekend "+grondkleur+" "+patroon+patroon2;
  }
  //extern
  function GenAanwezig(gen,genotype)
  {
	var g = ","+genotype+",";
	if      (g.indexOf(","+gen+"/")>=0 && g.indexOf("/"+gen+",")>=0 ) return 2;
	else if (g.indexOf("-"+gen+"/")>=0 && g.indexOf("-"+gen+",")>=0 ) return 2;
	else if (g.indexOf(","+gen+"-")>=0 && g.indexOf("/"+gen+"-")>=0 ) return 2;
	else if (g.indexOf(","+gen+"/")>=0 || g.indexOf("/"+gen+",")>=0 ) return 1;	
	else if (g.indexOf("-"+gen+"/")>=0 || g.indexOf("-"+gen+",")>=0 ) return 1;	
	else if (g.indexOf(","+gen+"-")>=0 || g.indexOf("/"+gen+"-")>=0 ) return 1;	
	else if (g.indexOf("-"+gen+"-")>=0 ) 
	{
		if(g.indexOf("-"+gen+"-",g.indexOf("-"+gen+"-")+1)>=0) return 2;		
		else return 1;
	}
	else   return 0;	
  }
//extern
function initKip()
{
  species = "gallus";
  listitems = listitems0;
  listMdefs = listMdefs0;
  listFdefs = listFdefs0;
  Alleles0 = Alleles1;
  Alleles0Super = Alleles1Super;
  //
  nlwrd = nlwrds.split(';');
  enwrd = enwrds.split(';');
}
//extern; New post extern js features
function KruisingPartialGT(pmgt,pfgt)
{
	//init vertaal array
	initKip();
	//
	var hidegtchecked = "0";
	var cgm = ""; //complete genotype male
	var cgf = ""; //idem female
	//  
	for(ly=0;ly<listitems.length;ly++)
	{
		var locusP = "";
		var locval = "";
		var locus = listitems[ly];
		var locdef = listMdefs[ly];
		if(pmgt!=""  && pmgt.indexOf(":")>=0)
		{
			//loop thru all partial gt members; last one per locus is taken
			for(li=0;li<pmgt.split(',').length;li++)
			{
				locusP = pmgt.split(',')[li].split(':')[0];
				if(locusP!="")
				{
					if(locusP==locusP.substring(0,1))
					{
						locusP += "loc";
					}
					locval = pmgt.split(',')[li].split(':')[1];
					if(locval.indexOf("(")>=0 || locval.indexOf(")")>=0)
					{
						locval = locval.replace("(","").replace(")","");
					}
					if(locusP==locus && locval!="" && locval.indexOf("/")>=0)
					{
						locdef = locval;
					}
				}
			}
		}
		if(cgm=="")
		{
			cgm+= locdef;
		}
		else
		{
			cgm += ","+locdef;
		}
	}  
	for(ly=0;ly<listitems.length;ly++)
	{
		var locusP = "";
		var locval = "";
		var locus = listitems[ly];
		var locdef = listFdefs[ly];
		if(pfgt!=""  && pfgt.indexOf(":")>=0)
		{
			//loop thru all partial gt members; last one per locus is taken
			for(li=0;li<pfgt.split(',').length;li++)
			{
				locusP = pfgt.split(',')[li].split(':')[0];
				if(locusP!="")
				{
					if(locusP==locusP.substring(0,1))
					{
						locusP += "loc";
					}
					locval = pfgt.split(',')[li].split(':')[1];
					if((locval.indexOf("(")>=0 || locval.indexOf(")")>=0) && locval.indexOf("/")>=0)
					{
						locval = locval.split('/')[0]+"/-";
					}
					if(locusP==locus && locval!="" && locval.indexOf("/")>=0)
					{
						locdef = locval;
					}
				}
			}
		}
		if(cgf=="")
		{
			cgf = locdef;
		}
		else
		{
			cgf += ","+locdef;
		}
	}	
  	//	
	return Kruising(cgm,cgf,hidegtchecked);
	//
}
//extern; Other species
function GetCompleteGTotherSpecies(mf,pgt,mammal)
{
	if(mf=="M")
	{	
		var cgm = ""; //complete genotype male
		for(ly=0;ly<listitems.length;ly++)
		{
			var locusP = "";
			var locval = "";
			var locus = listitems[ly];
			var locdef = listMdefs[ly];
			if(pgt!=""  && pgt.indexOf(":")>=0)
			{
				//loop thru all partial gt members; last one per locus is taken
				for(li=0;li<pgt.split(',').length;li++)
				{
					locusP = pgt.split(',')[li].split(':')[0];
					if(locusP!="")
					{					
						locval = pgt.split(',')[li].split(':')[1];
						if(locval.indexOf("(")>=0 || locval.indexOf(")")>=0)
						{
							if(mammal=="MAMMAL")
							{
								locval = locval.split('/')[0]+"/-";
							}
							else
							{
								locval = locval.replace("(","").replace(")","");
							}
						}
						if(locusP==locus && locval!="" && locval.indexOf("/")>=0)
						{
							locdef = locval;
						}
					}
				}
			}
			if(cgm=="")
			{
				cgm+= locdef;
			}
			else
			{
				cgm += ","+locdef;
			}
		} 
		return cgm;
	}
	else if(mf=="F")
	{
		var cgf = ""; //idem female
		for(ly=0;ly<listitems.length;ly++)
		{
			var locusP = "";
			var locval = "";
			var locus = listitems[ly];
			var locdef = listFdefs[ly];
			if(pgt!=""  && pgt.indexOf(":")>=0)
			{
				//loop thru all partial gt members; last one per locus is taken
				for(li=0;li<pgt.split(',').length;li++)
				{
					locusP = pgt.split(',')[li].split(':')[0];
					if(locusP!="")
					{
						locval = pgt.split(',')[li].split(':')[1];
						if((locval.indexOf("(")>=0 || locval.indexOf(")")>=0) && locval.indexOf("/")>=0)
						{
							if(mammal=="MAMMAL")
							{
								locval = locval.replace("(","").replace(")","");
							}
							else
							{
								locval = locval.split('/')[0]+"/-";
							}
						}
						if(locusP==locus && locval!="" && locval.indexOf("/")>=0)
						{
							locdef = locval;
						}
					}
				}
			}
			if(cgf=="")
			{
				cgf = locdef;
			}
			else
			{
				cgf += ","+locdef;
			}
		}	
		return cgf;
	}
}
//extern
function KruisingPartialGTotherSpecies(pmgt,pfgt)
{
	//
	var hidegtchecked = "0";
	var cgm = GetCompleteGTotherSpecies("M",pmgt); //complete genotype male
	var cgf = GetCompleteGTotherSpecies("F",pfgt); //idem female
	//  
	return Kruising(cgm,cgf,hidegtchecked);
	//
}
//extern; assist
function getPartialFromCompleteGT(gt)
{
	var pgt = ""; //complete partial genotype
	//  
	for(ly=0;ly<listitems.length;ly++)
	{
		var locval = "";
		var locus = listitems[ly];
		locval = gt.split(',')[ly];
		if(pgt=="")
		{
			pgt+= locus+":"+locval;
		}
		else
		{
			pgt += ","+locus+":"+locval;
		}
	}
	return pgt;
}
//extern
function getGTforZoekPlaatjeAssist(gt,def)
{
	var pgt = ""; //complete partial genotype
	//  
	for(ly=0;ly<listitems.length;ly++)
	{
		var locval = "";
		var locval2= "";
		var locus  = listitems[ly];
		var locdef = listFdefs[ly];
		var locdefM = listMdefs[ly];
		if(locdefM.indexOf("/-")>=0)//omdraaien voor zoogdieren
		{
			locdefM = listFdefs[ly];
			locdef  = listMdefs[ly];
		}
		locval = gt.split(',')[ly].split('/')[0];
		locval2= gt.split(',')[ly].split('/')[1];
		//dominant gene first
		if(locdef.indexOf("/-")>=0 && (listHets[ly]=="-" || locval2=="-"))
		{
			locval = locval+"/("+locval+")";
		}
		else if(locdef.indexOf("/-")>=0 && listHets[ly]=="+" && locval2!="-")
		{
			locval = locval+"/("+locval2+")";
		}
		else if(listHets[ly]=="+") //eg blue Bl/bl+
		{
			locval = gt.split(',')[ly];
		}
		else
		{
			locval = locval+"/"+locval;
		}
		if(locval.replace("(","").replace(")","")!=locdefM)
		{
			if(pgt=="")
			{
				pgt+= locus+":"+locval;
			}
			else
			{
				pgt += ","+locus+":"+locval;
			}
		}
	}
	if(pgt=="")
	{
		return def;
	}
	else
	{
		return pgt;
	}
}
//Breedbook genotype
function getBreedbookGT(gt)
{
	var pgt = ""; //complete partial genotype
	//  
	for(ly=0;ly<listitems.length;ly++)
	{
		var locval = "";
		var locus  = listitems[ly];
		var locdef = listFdefs[ly];
		var locdefM = listMdefs[ly];
		if(locdefM.indexOf("/-")>=0)//omdraaien voor zoogdieren
		{
			locdefM = listFdefs[ly];
			locdef  = listMdefs[ly];
		}
		locval = gt.split(',')[ly];
		if(locval!=locdefM && locval!=locdef)
		{
			if(pgt=="")
			{
				pgt+= locus+":"+locval;
			}
			else
			{
				pgt += ","+locus+":"+locval;
			}
		}
	}
	return pgt;
}
function getBreedbookGTspecial(gt)
{
	var pgt = ""; //complete partial genotype
	//  
	for(ly=0;ly<listitems.length;ly++)
	{
		var locval = "";
		var locus  = listitems[ly];
		var locdef = listFdefs[ly];
		var locdefM = listMdefs[ly];
		if(locdefM.indexOf("/-")>=0)//omdraaien voor zoogdieren
		{
			locdefM = listFdefs[ly];
			locdef  = listMdefs[ly];
		}
		locval = gt.split(',')[ly];
		if(locval!=locdefM && locval!=locdef)
		{
			if(pgt=="")
			{
				pgt+= locval;
			}
			else
			{
				pgt += ","+locval;
			}
		}
	}
	return pgt;
}
//intern; punnett square
function CreateGametesArray(mf,ArrIn,minZ,maxZ,ZArr)
{
	var G1Arr  = new Array();
	var RArr = new Array();
	
	//split up the alleles
	for(ai = 0; ai<ArrIn.length; ai += 1)
	{
		RArr[RArr.length]=ArrIn[ai].split('/')[0];
		RArr[RArr.length]=ArrIn[ai].split('/')[1];
	}
	
	//First locus; at least 2 combinations possible per locus
	if(RArr[0]==RArr[1])
	{
		G1Arr[G1Arr.length]=RArr[0];
	}
	else
	{
		G1Arr[G1Arr.length]=RArr[0];
		G1Arr[G1Arr.length]=RArr[1];
	}
		
	//Combine with other loci 
	for (r = 1; r < (RArr.length)/2;r++)
	{
		var TArr = new Array();
		var PArr = new Array();
		PArr = G1Arr;
		//see comment first locus
		if(RArr[(2*r)]==RArr[(2*r)+1])		
		{
			TArr[TArr.length]=RArr[(2*r)];
		}
		else
		{
			TArr[TArr.length]=RArr[(2*r)];
			TArr[TArr.length]=RArr[(2*r)+1];
		}
		//Aanroep sleutelprocedure die de combinaties van alle loci-combinaties maakt; wordt exponentieel groter. (Clue function)
		G1Arr = ArrayExtend(PArr,TArr);			
	}
	var G1ArrCopy = new Array();
	var copythis="1";	
	for(r = 0; r < G1Arr.length; r++)
	{
		copythis="1";
		var sx = ""; //sexlink f or m
		var G1Arrsplit = new Array();
		G1Arrsplit = G1Arr[r].split(',');
		for(im=minZ;im<=maxZ;im++)
		{
			var g = G1Arrsplit[im];
			var gti0 = g.substring(0,1);
			if(ArrayListContains(im,ZArr))
			{
				if(sx=="" && (gti0=="-"))
				{
				}
				else if(sx=="" && (gti0!="-"))
				{
					sx="m";
				}
				if(sx=="m" && (G1Arr[r].indexOf(",-")>=0 || G1Arr[r].indexOf("-,")>=0))
				{
					copythis="0";
					break;
				}
			}						
		}
		if (copythis=="1")
		{
			G1ArrCopy[G1ArrCopy.length]=G1Arr[r];
		}
	}
	G1Arr = G1ArrCopy;	
	return G1Arr; //Filtered;
}
//intern
function KruisingMatrix(m,f)
{
	var ResultArray = new Array();
	//
	var MArr = new Array();
	var FArr = new Array();
	var RArr = new Array();
	var F1Arr = new Array();
	var ZArr = new Array();
	//
	var acnt =0;	
	//read male genotype
	var Msplit = new Array();
	Msplit = m.split(',');
	for(i=0;i < Msplit.length; i++)
	{			
	    acnt=0;
		var chr=Msplit[i];
		for(j=0;j<2;j+=1)
		{
			var a = chr.split('/')[j];
			acnt+=1;			
			if(a=="-")
			{
				ZArr[ZArr.length]=i;
			}
		}
		if(acnt==1)
		{
			MArr[MArr.length]=chr+"/"+"-";
			ZArr[ZArr.length]=i;
		}
		else
		{
			MArr[MArr.length]=chr;
		}	
	}		
	acnt=0;	
	//read female genotype
	var Fsplit = new Array();
	Fsplit = f.split(',');
	for(ib=0;ib<Fsplit.length;ib++)
	{
		acnt=0;
		var chr=Fsplit[ib];
		for(j=0;j<2;j++)
		{
			var a = chr.split('/')[j];
			acnt+=1;
			if(a=="-")
			{
				ZArr[ZArr.length]=ib;
			}
		}		
		if(acnt==1)
		{
			FArr[FArr.length]=chr+"/"+"-";
			ZArr[ZArr.length]=ib;
		}
		else
		{
			FArr[FArr.length]=chr;
		}
	}	
	//Count combinations
	//Illegal combinations: don't copy
	var minZ = ZArr[0];
	var maxZ = ZArr[ZArr.length-1];
	//
	var MGametes = new Array();
	MGametes = CreateGametesArray("M",MArr,minZ,maxZ,ZArr);
	var FGametes = new Array();
	FGametes = CreateGametesArray("F",FArr,minZ,maxZ,ZArr);
	//
	var Matrix = new Array();
	Matrix[0] = new Array(); Matrix[0] = FGametes;
	Matrix[1] = new Array(); Matrix[1] = MGametes;
	for(mi = 0; mi < MGametes.length; mi++)
	{
		var ThisGamete = new Array();
		for(fi = 0; fi < FGametes.length;fi++)
		{
			var ThisGenotype = "";
			for(ma = 0; ma < MGametes[mi].split(',').length; ma++)
			{
				ThisGenotype += MGametes[mi].split(',')[ma]+"/";
				ThisGenotype += FGametes[fi].split(',')[ma];
				if(ma<MGametes[mi].split(',').length-1)
				{
					ThisGenotype += ",";
				}
			}
			ThisGamete[fi] = ThisGenotype;
		}
		
		Matrix[mi+2] = new Array();
		Matrix[mi+2] = ThisGamete;
	}
	return Matrix;
}
//extern
function GetGTordered(mf,gt)
{
  var orderedGT = "";
  var NArr = new Array();
  NArr = gt.split(',');
  for (i=0;i<NArr.length;i+=1)
  {
    var genepair = NArr[i];
    //
	var a = genepair.split('/')[0];
	var b = genepair.split('/')[1];
	var g0 = a.substring(0,1); 
	var g1 = b.substring(0,1);
	if (switchAlleles(a,b,Alleles0)) //multiple non wildtype alleles with capital eg E, E^R,E^Wh
	{
		genepair=b+"/"+a;
	}
	else
	{
		genepair=a+"/"+b;
	}
	if(orderedGT=="")
	{
		orderedGT = genepair;
	}
	else
	{
		orderedGT += ","+genepair;
	}
  }
	//
	return orderedGT;
}
//extern
function MockUpGT(gtin)
{
	var gt = gtin.replace(/\//g,"");
	for(mo=0;mo<Alleles0Super.length;mo++)
	{
		gt = gt.replace(Alleles0Super[mo],Alleles0Super[mo].replace("^","<sup>")+"</sup>").replace(Alleles0Super[mo],Alleles0Super[mo].replace("^","<sup>")+"</sup>");
	}
	gt = gt.replace(/\+/g,"<sup>+</sup>").replace(/,/g," ");
	return gt;
}
//extern
function removeLocus(LocArr,gt)
{
	var x1 = 0;
	var x2 = 0;
	var ngt = gt;
	var p1 = "";
	var p2 = "";
	for(l=0;l<LocArr.length;l++)
	{
		if(gt.indexOf(LocArr[l])>=0)
		{
			x1 = ngt.indexOf(LocArr[l]);
			x2 = (ngt+",").indexOf(",",ngt.indexOf(LocArr[l])+1);
			p1 = ngt.substring(0,x1-1);
			p2 = ngt.substring(x2+1);
			if(p1 != "" && p2 != "")
			{
				ngt = p1+","+p2;
			}
			else
			{
				ngt = p1+p2; //A:A/A,B:B/B,C:C/C
			}
		}
	}
	return ngt;
}
function switchAlleles(a,b,p_alleles)
{
	var g0 = a.substring(0,1); 
	var g1 = b.substring(0,1);
	if ((!(a==b) && !(g1=="-") && !(g0==g0.toUpperCase() && g1==g1.toLowerCase()  && g0!="-")) && 
	    ((g0==g0.toLowerCase() && g1==g1.toUpperCase()) || 
	      g0=="-" || 
	      (GetArrayListIndexByValue(b,p_alleles)<GetArrayListIndexByValue(a,p_alleles) ) ) ) //multiple non wildtype alleles with capital eg E, E^R,E^Wh
	{
		return true;
	}
	else
	{
		return false;
	}
}
//summary in alert
function KruisSummary(lng,pmgt,pfgt){
		var ResultArrayEmbed = new Array();
		ResultArrayEmbed = KruisingPartialGT(pmgt,pfgt);
		var Hanen = "Hanen";
		var Hennen = "Hennen";
		var klrveld = 4;
		if(lng!="NL")
		{
			Hanen  = Cockereltxt;
			Hennen = Pullettxt;
			if (taal2=='EN')
			{
				Hanen  = "Cockerels";
				Hennen = "Pullets";
			}
			klrveld = 5;		
		}
		var txt = "";
		for (x in ResultArrayEmbed)
		{
			if(ResultArrayEmbed[x].split(';')[0]=="FENOTYPE") 
			{
				var gndr = ResultArrayEmbed[x].split(';')[1].replace("M",Hanen).replace("F",Hennen);
				var perc = ResultArrayEmbed[x].split(';')[3];
				perc = perc.split('=')[2].split(',')[0];
				txt += perc+" "+gndr+", "+ResultArrayEmbed[x].split(';')[klrveld]+" \n ";
			}
		}
		alert(txt);
		//
	} 
//
var stepsEN = 	"The colors you choose are purebreed if possible.<BR>"+
				"There are a lot of possible genotypes (carried genes).<BR>"+
				"To set these, first choose both purebreed parents<BR>"+
				"and then click Advanced...-link to your right.";
var stepsNL = 	"De kleuren die je kiest zijn zo veel mogelijk fokzuiver.<BR>"+
				"Er zijn namelijk veel mogelijkheden van verborgen eigenschappen.<BR>"+
				"Om deze in te stellen, kies eerst 2 fokzuivere ouders<BR>"+
				"en klik dan op de Advanced...-hyperlink rechts.";
var mail2EN  = 	" ( <A HREF=mailto:h.meijers@hetnet.nl >send me a mail</A>, also for comments and questions )";				
var mail2NL  =	" ( <A HREF=mailto:h.meijers@hetnet.nl >stuur me een mailtje</A>, ook voor vragen en opmerkingen )";				
var colorsEN =	"The colorlists are not complete and some colors are represented more than once. They can not be removed.<BR>"+
				"New colors can be added and colornames can be altered###.<BR>"+
				"Note that novices and experienced breeders use different names.";
var colorsNL =	"De kleurenlijstjes zijn nooit volledig en sommige kleuren staan er meermaals in. Ze kunnen niet meer worden verwijderd.<BR>"+
				"Nieuwe kleuren kunnen toegevoegd worden en bestaande namen kunnen gewijzigd worden###.<BR>"+
				"Bedenk dat beginners en gevorderden andere namen gebruiken.";
var furtherEN =	"Visit the help-page for introduction, basics of genetics and other species calculators.";
var furtherNL =	"Bezoek de help-pagina voor introductie, basisstof genetica en calculators voor andere soorten.";
var stepsHTML = stepsEN+"<BR>"+colorsEN.replace("###",mail2EN)+"<BR>"+furtherEN+"<BR><BR>"+stepsNL+"<BR>"+colorsNL.replace("###",mail2NL)+"<BR>"+furtherNL;
//
function WhyDoIGet(taal)
{
	if(taal=="NL") alert(stepsNL.replace(/<BR>/g," \n "));
	else if(taal=="EN") alert(stepsEN.replace(/<BR>/g," \n "));
}
function WhyDoIGet2(spanid)
{
	document.getElementById(spanid).innerHTML = stepsHTML;
}
function WhyDoIGet3()
{
	alert((colorsEN+" \n \n "+colorsNL).replace(/###/g,"").replace(/<BR>/g," \n "));
}
// stop hiding -->
