var Global_DisplayWarning = 1000; // Solutions
var Global_ExecutionWarning = 500;


function GetThisYear () {
  var ThisDate = new Date();
  return ThisDate.getFullYear();
}

function checkTime(i)
{
if (i<10) 
  {i="0" + i}
  return i
}

function GetTimeStamp () {

	var months=new Array(13);
	months[1]="January";
	months[2]="February";
	months[3]="March";
	months[4]="April";
	months[5]="May";
	months[6]="June";
	months[7]="July";
	months[8]="August";
	months[9]="September";
	months[10]="October";
	months[11]="November";
	months[12]="December";
	var time=new Date();
	var lmonth=months[time.getMonth() + 1];
	var date=time.getDate();
	var year=time.getYear();
	
	var h=time.getHours()
	var m=time.getMinutes()
	var s=time.getSeconds()

	if (year < 2000)
	year = year + 1900;
	DayStamp = date + " " + lmonth + " " + year;
	
	m=checkTime(m)
	s=checkTime(s)
	TimePoint = h+":"+m+":"+s
	
	return DayStamp + ", " + TimePoint;
}



function TrimString (str) {
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}


function TrimQuotes (str) {
  return str.replace(/^\"/g, '').replace(/\"$/g, '');
}

function TrimDashes (str) {
  return str.replace(/^\-+/g, '').replace(/\-+$/g, '');
}

function TrimPercents (str) {
  return str.replace(/^\%+/g, '').replace(/\%+$/g, '');
}

function TrimStars (str) {
  return str.replace(/^\*+/g, '').replace(/\*+$/g, '');
}

function UpperCase(text)
{
	return text.toUpperCase()
}

function LowerCase(text)
{
	return text.toLowerCase()
}


function Pause(millis)
{
	var date = new Date();
	var curDate = null;

	do { curDate = new Date(); }
	while(curDate-date < millis);
} 


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

//alert (BrowserDetect.browser);







//onclick="setEventListener(disableKey);" onclick="unsetEventListener(disableKey);"
function disableKey(event) {
  if (!event) event = window.event;
  if (!event) return;

  var keyCode = event.keyCode ? event.keyCode : event.charCode;
  var charCode = event.charCode ? event.charCode : 0; 

  //window.status = keyCode;
  
  // keyCode for F% on Opera is 57349 ?!
  // alert("keyCode :" + keyCode + " event.ctrlKey : " + event.ctrlKey + " event.shiftKey : " + event.shiftKey + " charCode:" + charCode + " event.preventDefault:" + event.preventDefault);


  if ( ( (! charCode ) && 
  		  (
  		    (keyCode == 116) /* F5 */
		   )
		)
		
		 || 
		 
		((event.ctrlKey) &&
			(
		  	  ((keyCode == 80) || (keyCode == 112))  ||
		  	  ((keyCode == 83) || (keyCode == 115))  
			)
		 )
	 ) {
  
  //alert("keyCode :" + keyCode + " event.ctrlKey : " + event.ctrlKey + " event.shiftKey : " + event.shitKey + " charCode:" + charCode + " event.preventDefault:" + event.preventDefault);
  
   if  ( (event.ctrlKey) &&
   		  (
   		   ((keyCode == 83) || (keyCode == 115)) /* CTRL-S or CTRL-s */ ||
   		   ((keyCode == 80) || (keyCode == 112)) /* CTRL-P or CTRL-p */ 
		  )		
		) { window.status = "CTRL-(X)";}

   if  ((!charCode ) && (keyCode == 116)) { window.status = "F5 key";}
   
   window.setTimeout("window.status='';", 2000);

   // Standard DOM (Mozilla):
   if (event.preventDefault) event.preventDefault();

   //IE (exclude Opera with !event.preventDefault):
   if (document.all && window.event && !event.preventDefault) {
     event.cancelBubble = true;
     event.returnValue = false;
     event.keyCode = 0;
   }

   return false;
  }
}


function disableKey_opera(event) {
  if (!event) event = window.event;
  if (!event) return;

  var keyCode = event.keyCode ? event.keyCode : event.charCode;
  var charCode = event.charCode ? event.charCode : 0; 
  //alert("keyCode :" + keyCode + " event.ctrlKey : " + event.ctrlKey + " event.shiftKey : " + event.shiftKey + " charCode:" + charCode + " event.preventDefault:" + event.preventDefault);


  if ( (  /* (! charCode ) && */
  		  (
  		    0*(keyCode == 116) /* F5 */
		   )
		)
		
		 || 
		 
		((event.ctrlKey) &&
			(
		  	  ((keyCode == 80) || (keyCode == 112))  ||
		  	  ((keyCode == 83) || (keyCode == 115))  
			)
		 )
	 ) {
  
  //alert("keyCode :" + keyCode + " event.ctrlKey : " + event.ctrlKey + " event.shiftKey : " + event.shitKey + " charCode:" + charCode + " event.preventDefault:" + event.preventDefault);
  
   if  ( (event.ctrlKey) &&
   		  (
   		   ((keyCode == 83) || (keyCode == 115)) /* CTRL-S or CTRL-s */ ||
   		   ((keyCode == 80) || (keyCode == 112)) /* CTRL-P or CTRL-p */ 
		  )		
		) { window.status = "CTRL-S / CTRL-P ";}

   if  ( /* (!charCode ) && */ (keyCode == 116)) { window.status = "F5 key";}
   
   window.setTimeout("window.status='';", 2000);

   // Standard DOM (Mozilla):
   if (event.preventDefault) event.preventDefault();

   //IE (exclude Opera with !event.preventDefault):
   if (document.all && window.event && !event.preventDefault) {
     event.cancelBubble = true;
     event.returnValue = false;
     event.keyCode = 0;
   }

   return false;
  }
}





function setEventListener(eventListener) {
  if (document.addEventListener) document.addEventListener('keypress', eventListener, true);
  else if (document.attachEvent) document.attachEvent('onkeydown', eventListener);
  else document.onkeydown = eventListener;

/*
if (!document.getElementById) return;
  var el = document.getElementById("Msg");
  if (el) el.innerHTML = "Event handler added.";
*/

}

function unsetEventListener(eventListener) {
  if (document.removeEventListener) document.removeEventListener('keypress', eventListener, true);
  else if (document.detachEvent) document.detachEvent('onkeydown', eventListener);
  else document.onkeydown = null;
  
/*
  if (!document.getElementById) return;
  var el = document.getElementById("Msg");
  if (el) el.innerHTML = "Event handler removed.";
*/

}


function BrowserSetEventListener() {

	if ( BrowserDetect.browser == "Opera")
	{
		setEventListener(disableKey_opera);
	}
	else
	{
		setEventListener(disableKey);
	}

}



var message="B-Lands Consulting\nWorld Trade Center\n5 Place Robert Schuman - BP 1510\n38025 Grenoble, France\n\nPublic access: Level 4 [lift code: A204]\nFree WiFi SSID: B-Lands (Visitors)\n\nLine 1: +33 (0) 476 230 627\nLine 2: +33 (0) 476 282 952\nFax 1: +33 (0) 476 282 953\nFax 2: +33 (0) 476 702 651\n\nwww.reach-compliance.eu\n";
function click(e)
{
  if (document.all)
  {
    if (event.button==2||event.button==3)
    {
      alert(message);
      return false;
    }
  }
  else
  {
    if (e.button==2||e.button==3)
    {
      e.preventDefault();
      e.stopPropagation();
      alert(message);
      return false;
    }
  }

}

if (document.all) // for IE
{
  document.onmousedown=click;
}
else // for FF
{
  document.onclick=click;
}


function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script');
  fileref.setAttribute("type","text/javascript");
  fileref.setAttribute("src", filename);
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link");
  fileref.setAttribute("rel", "stylesheet");
  fileref.setAttribute("type", "text/css");
  fileref.setAttribute("href", filename);
 }
 if (typeof fileref!="undefined")
 {
	//alert ('Loading file: '+ filename);
  	document.getElementsByTagName("head")[0].appendChild(fileref);
  //alert('document.getElementsByTagName("head")[0].appendChild(' + fileref + ');');
  //setTimeout('document.getElementsByTagName("head")[0].appendChild(' + eval(fileref) + ');',2000);
 }
}



function InitEngine() {
	
loadjscssfile("../shared/databases/ESISCD/classification.js", "js");
loadjscssfile("../shared/databases/ESISCD/pbt.js", "js");

	if ( BrowserDetect.browser == "Opera")
	{		
 	setTimeout("javascript:manualPB2.setPercentage('+4');",0);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis01.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis02.js", "js");',20);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis03.js", "js");',30);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis04.js", "js");',40);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis05.js", "js");',50);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis06.js", "js");',60);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis07.js", "js");',70);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis08.js", "js");',80);
	}
	else
	{
	
/*	
	setTimeout("javascript:manualPB2.setPercentage('+4');",0);
	setTimeout('loadjscssfile("http://server1.reach-compliance.eu/shared/databases/ESIS/esis01.js", "js");',10);
	setTimeout('loadjscssfile("http://server1.reach-compliance.eu/shared/databases/ESIS/esis02.js", "js");',10);
	setTimeout('loadjscssfile("http://server2.reach-compliance.eu/shared/databases/ESIS/esis03.js", "js");',10);
	setTimeout('loadjscssfile("http://server2.reach-compliance.eu/shared/databases/ESIS/esis04.js", "js");',10);
	setTimeout('loadjscssfile("http://server3.reach-compliance.eu/shared/databases/ESIS/esis05.js", "js");',10);
	setTimeout('loadjscssfile("http://server3.reach-compliance.eu/shared/databases/ESIS/esis06.js", "js");',10);
	setTimeout('loadjscssfile("http://server4.reach-compliance.eu/shared/databases/ESIS/esis07.js", "js");',10);
	setTimeout('loadjscssfile("http://server4.reach-compliance.eu/shared/databases/ESIS/esis08.js", "js");',10);
	setTimeout('loadjscssfile("http://server5.reach-compliance.eu/shared/databases/ESIS/esis09.js", "js");',10);
	setTimeout('loadjscssfile("http://server5.reach-compliance.eu/shared/databases/ESIS/esis10.js", "js");',10);
	setTimeout('loadjscssfile("http://server6.reach-compliance.eu/shared/databases/ESIS/esis11.js", "js");',10);
	setTimeout('loadjscssfile("http://server6.reach-compliance.eu/shared/databases/ESIS/esis12.js", "js");',10);
	setTimeout('loadjscssfile("http://server7.reach-compliance.eu/shared/databases/ESIS/esis13.js", "js");',10);
	setTimeout('loadjscssfile("http://server7.reach-compliance.eu/shared/databases/ESIS/esis14.js", "js");',10);
	setTimeout('loadjscssfile("http://server8.reach-compliance.eu/shared/databases/ESIS/esis15.js", "js");',10);
	setTimeout('loadjscssfile("http://server8.reach-compliance.eu/shared/databases/ESIS/esis16.js", "js");',10);
	setTimeout('loadjscssfile("http://server9.reach-compliance.eu/shared/databases/ESIS/esis17.js", "js");',10);
	setTimeout('loadjscssfile("http://server9.reach-compliance.eu/shared/databases/ESIS/esis18.js", "js");',10);
	setTimeout('loadjscssfile("http://server10.reach-compliance.eu/shared/databases/ESIS/esis19.js", "js");',10);
	setTimeout('loadjscssfile("http://server10.reach-compliance.eu/shared/databases/ESIS/esis20.js", "js");',10);
	setTimeout('loadjscssfile("http://server11.reach-compliance.eu/shared/databases/ESIS/esis21.js", "js");',10);
	setTimeout('loadjscssfile("http://server11.reach-compliance.eu/shared/databases/ESIS/esis22.js", "js");',10);
	setTimeout('loadjscssfile("http://server12.reach-compliance.eu/shared/databases/ESIS/esis23.js", "js");',10);
	setTimeout('loadjscssfile("http://server12.reach-compliance.eu/shared/databases/ESIS/esis24.js", "js");',10);
  */
 /* 
 	setTimeout("javascript:manualPB2.setPercentage('+4');",0);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis01.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis02.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis03.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis04.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis05.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis06.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis07.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis08.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis09.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis10.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis11.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis12.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis13.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis14.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis15.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis16.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis17.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis18.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis19.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis20.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis21.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis22.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis23.js", "js");',10);
	setTimeout('loadjscssfile("../shared/databases/ESIS/esis24.js", "js");',10);
 */
 
 
/* */
 	setTimeout("javascript:manualPB2.setPercentage('+4');",0);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis01.js", "js");',10);
/* */
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis02.js", "js");',20);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis03.js", "js");',30);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis04.js", "js");',40);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis05.js", "js");',50);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis06.js", "js");',60);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis07.js", "js");',70);
	setTimeout('loadjscssfile("../shared/databases/ESISCD/esis08.js", "js");',80);
/* */
/* */

	}

	var InitEngineValidated = false
	//while (! InitEngineValidated)
	{
		setTimeout('confirm(GetMessage("Wait_Engine_Init"))', 0);
	}

//	setTimeout('alert(\"' +  GetMessage('Wait_Engine_Init') + '\")', 10);
		
		if (Global_PartnerEmails)
		{
			//Global_PartnerEmails = MakeEmailOutputString(MakeEmailList(CleanEmailString(Global_PartnerEmails)));
		}
		
		RefreshPage();
}



function IsChar(Char)
{
	return ( 
			((Char.charCodeAt(0) >= 65) && (Char.charCodeAt(0) <= 90)) ||
			((Char.charCodeAt(0) >= 97) && (Char.charCodeAt(0) <= 122)) 
		  );

}

function IsDigit(Char)
{
	return ((Char.charCodeAt(0) >= 48) && (Char.charCodeAt(0) <= 57));
}


function FormDisplayNewRow(Form, RowNumber)
{
	return;
	
	var MAX_ROW = 5 ;
	if (Form)
	{
	   var Int_NextRow = parseInt(RowNumber) + 1;
	   var RowCounterMember = GetFormMemberByID(Form,'blands_row_counter');
	   var Int_RowCounter = parseInt(RowCounterMember.value);
	   //var CurrentTRMember= GetFormMember(Form, 'blands_TR__', RowNumber);
	   
	   //alert ("Int_NextRow :" + Int_NextRow);
	   
	   if (Int_NextRow <= MAX_ROW) 
	    {
	   		var NextTRMember= GetFormMember(Form, 'blands_TR__', Int_NextRow);
			var RowCounterMember = GetFormMemberByID(Form, 'blands_row_counter');
			
			NextTRMember.style.display = 'inline';
			
			if (Int_NextRow > 2 )
			{  // auto lock
				if (Int_NextRow-2 > 0) 
				{
					//FormLockRaw(Form, Int_NextRow-2);
					setTimeout('FormLockRaw(document.forms[\'BlandsForm\']' + ' ,' + eval(Int_NextRow-2) + ' );',0);
				}
			}
			
			RowCounterMember.value = Math.max(parseInt(RowCounterMember.value), Int_NextRow);
		}
		else if (Int_NextRow == (MAX_ROW + 1))
		{
				//alert("Int_NextRow == (MAX_ROW + 1) :" + Int_NextRow);
			FormLockRaw(Form, Int_NextRow -2);
		}

			
			
		
	}
	else
	{
		alert("Form not found");
	}
	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function Parse_CAS_Fct(token)
{
	var Char="";
	token.InitialValue = token.InitialValue.replace(/\s+/g, '')// remove all spaces - if any
	token.InitialValue = token.InitialValue.replace(/^0+/g, '')// remove leading zeros

	for (var i=0; i< token.InitialValue.length; i++)
	{
		Char = token.InitialValue.charAt(i);
		if (IsDigit(Char))
		{
			token.IntegerString =  token.IntegerString + Char ;
		}
		else if (IsChar(Char))
		{
			token.HasCar = true;
			token.DigitsOnly = false;
			token.CharString =  token.CharString + Char ;
		}
		
		if (IsDigit(Char) /*|| IsChar(Char) */ || Char == '-')
		{
			token.Pattern =  token.Pattern + Char ;
		}
		
	}
	
	var Len = token.IntegerString.length;
	
	if ((Len > 10) || (Len < 4))
	{
		token.Error = true;
	}
	else if ((Len == 5) && ( parseInt(token.IntegerString) < 50000))
	{
		token.Error = true;
	}
	else
	{
		var R = parseInt(token.IntegerString.charAt(Len-1));
		var j = 1;
		var Sum =0;
		token.ParsedToken = '-' + token.IntegerString.charAt(Len-1);
			for (var i=Len-2; i>= 0; i--, j++)			
			{
				Char = token.IntegerString.charAt(i);
				Sum += j * parseInt(Char);
				
				token.ParsedToken = Char + token.ParsedToken;
				if (j==2) {token.ParsedToken = '-' + token.ParsedToken;}
			}


		if ( R != (Sum % 10))
		{
			token.Error = true;
		} else if (
				   (token.Pattern.length >= 6) &&
				   (token.Pattern.length <= 12) &&
				   (token.Pattern.charAt(token.Pattern.length - 5) == '-') &&
				   (token.Pattern.charAt(token.Pattern.length - 2) == '-') &&
				   ((token.Pattern.match('-') ? token.Pattern.match(new RegExp("-", "g")).length : 0) == 2) 
				   )
		{
			//alert("token.ParsedToken: " + token.ParsedToken + "   " + "token.Pattern: " + token.Pattern);
			token.Error = ! (token.ParsedToken == token.Pattern);
		}
		else
		{
			token.Error = false;
		}
		
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function Parse_EINECS_Fct(token)
{
	var Char="";
	token.InitialValue = token.InitialValue.replace(/\s+/g, '')// remove all spaces - if any
	token.InitialValue = token.InitialValue.replace(/^0+/g, '')// remove leading zeros
	
	for (var i=0; i< token.InitialValue.length; i++)
	{
		Char = token.InitialValue.charAt(i);
		if (IsDigit(Char))
		{
			token.IntegerString =  token.IntegerString + Char ;
		}
		else if (IsChar(Char))
		{
			token.HasCar = true;
			token.DigitsOnly = false;
			token.CharString =  token.CharString + Char ;
		}
		
		if (IsDigit(Char) /*|| IsChar(Char)*/ || Char == '-')
		{
			token.Pattern =  token.Pattern + Char ;
		}

}
	
	var Len = token.IntegerString.length;
	LeadDigit = parseInt(token.IntegerString.charAt(0));
	
	if (Len != 7)
	{
		token.Error = true;
	}
	else if ( !((LeadDigit >=2) && (LeadDigit <=9)))
	{
		token.Error = true;
	} else
	if ((LeadDigit == 2) && ( parseInt(token.IntegerString) < 2000018))
	{
		token.Error = true;
	}else
	if ((LeadDigit == 3) && ( parseInt(token.IntegerString) < 3000003))
	{
		token.Error = true;
	}else
	if ((LeadDigit == 4) && ( parseInt(token.IntegerString) < 4000109))
	{
		token.Error = true;
	}else
	if ((LeadDigit == 5) && ( parseInt(token.IntegerString) < 5000010))
	{
		token.Error = true;
	}else
	if ((LeadDigit == 6) && ( parseInt(token.IntegerString) < 6000011))
	{  //6xx-xxx-x for newly identified phase-in under REACH.
		token.Error = true;
	}else
	if ((LeadDigit == 7) && ( parseInt(token.IntegerString) < 7000007))
	{ //7xx-xxx-x for newly identified non-phase-in substances under REACH.
		token.Error = true;
	}else
	if ((LeadDigit == 8) && ( parseInt(token.IntegerString) < 8000008))
	{ //8x-xxx-x for newly identified substances under REACH.
		token.Error = true;
	}else
	if ((LeadDigit == 9) && ( parseInt(token.IntegerString) < 9000014))
	{ //9xx-xxx-x for newly identified substances under REACH.
		token.Error = true;
	}else
	{
		var R = parseInt(token.IntegerString.charAt(Len-1));
		var j = Len - 1;
		var Sum =0;
		var CheckSum;
		token.ParsedToken = '-' + token.IntegerString.charAt(Len-1);
			for (var i=Len-2; i>= 0; i--, j--)			
			{
				Char = token.IntegerString.charAt(i);
				Sum += j * parseInt(Char);
				
				token.ParsedToken = Char + token.ParsedToken;
				if (j==4) {token.ParsedToken = '-' + token.ParsedToken;}
			}
		CheckSum = (Sum % 11)
		CheckSum = (CheckSum > 9) ? 1 : CheckSum  /// PB with %11 when reminder in 10
		if ( R != CheckSum)
		{
			token.Error = true;
		} else if (
				   (token.Pattern.length == 9) &&
				   (token.Pattern.charAt(token.Pattern.length - 6) == '-') &&
				   (token.Pattern.charAt(token.Pattern.length - 2) == '-') &&
				   ((token.Pattern.match('-') ? token.Pattern.match(new RegExp("-", "g")).length : 0) == 2)
				   )
		{
			token.Error = ! (token.ParsedToken == token.Pattern);
		}
		else
		{
			token.Error = false;
		}
		
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function TokenClass(InputString, Functor)
{
	this.HasCar = false;
	this.IntegerString = "";
	this.CharString = "";
	this.InitialValue = InputString;
	this.ParsedToken = "";
	this.Pattern = "";
	this.DigitsOnly = true;
	this.Error = false;
	this.Functor = Functor;
	
	Functor(this);
}




function IsEINECS(Value)
{
	var EINECS_Token = new TokenClass(Value, Parse_EINECS_Fct);
	return ((! EINECS_Token.Error) && LookUpEINECS_ESIS(EINECS_Token.ParsedToken))
}

function IsCAS(Value)
{
	var CAS_Token = new TokenClass(Value, Parse_CAS_Fct);
	return (! CAS_Token.Error)
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormFocusOnRow(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_row__', RowNumber);
	   	  if (Member) 
	        {
				Member.focus();
			}
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormFocusOnCAS(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
	   	  if (Member) 
	        {
				Member.focus();
			}
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormFocusOnEINECS(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
	   	  if (Member) 
	        {
				Member.focus();
			}
	}
	else
	{
		alert("Form not found");
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormFocusOnName(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_substance_name__', RowNumber);
	   	  if (Member) 
	        {
				Member.focus();
			}
	}
	else
	{
		alert("Form not found");
	}
	
}






function FormOnMouseOutOnCAS(Form, RowNumber)
{  // Fixing Firefox issue with onMouseOut
	FormFocusOnRow(Form, RowNumber); FormFocusOnCAS(Form, RowNumber);
}

function FormOnMouseOutOnName(Form, RowNumber)
{  // Fixing Firefox issue with onMouseOut
	FormFocusOnRow(Form, RowNumber); FormFocusOnName(Form, RowNumber);
}

function FormOnMouseOutOnEINECS(Form, RowNumber)
{  // Fixing Firefox issue with onMouseOut
	FormFocusOnRow(Form, RowNumber); FormFocusOnEINECS(Form, RowNumber);
}


function GetFormMemberByID(Form, ID)
{
	if (Form)
	{
	   //var element = Form.elements[Arg];
	   var element = document.getElementById(ID);
	   if (! element)
	     {
			 alert("Form member not found :" + ID);
			 return null;
		 } else
		 {
			return element; 
		 }
	}
	
 alert("Form not found");
 return null;
}


function GetFormMember(Form, Member, RowNumber)
{
	if (Form)
	{
	   var ID = Member + RowNumber;
	   return GetFormMemberByID(Form, ID);
	}
	
 alert("Form not found");
 return null;
}




function SetFormMemberValue(Form, Member, Value, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, Member, RowNumber);
	   if (Member) 
	     {
	        Member.value = Value;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function GetFormMemberValue(Form, Member, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, Member, RowNumber);
	   if (Member) 
	     {
	        return Member.value;
	     }
	    return "";
	}
	else
	{
		alert("Form not found");
		return "";
	}
	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function IsFormLocked(Form, RowNumber)
{
	if (Form)
	{
	   var MemberLock= GetFormMember(Form, 'blands_input_locked__', RowNumber);
	   if (MemberLock) 
	     {
	        return (MemberLock.checked); 
	     }
	     else
         {
			return false;
         }
	}
	else
	{
		alert("Form not found");
		return false;
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function ResetAllField(Form, RowNumber)
{
	if (Form)
	{
		FormResetCAS(Form, RowNumber);
		FormResetName(Form, RowNumber);
	    FormResetEINECS(Form, RowNumber);
		FormResetCMRPBT(Form, RowNumber);
		FormResetR5053(Form, RowNumber);
		FormResetTonnage(Form, RowNumber);
		FormResetRegistrationYear(Form, RowNumber);
		FormResetStatus(Form, RowNumber);		  
		FormResetSimilar(Form, RowNumber);		  
	}
	else
	{
		alert("Form not found");
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetRaw(Form, RowNumber)
{
	if (Form)
	{
		var MemberLock= GetFormMember(Form, 'blands_input_locked__', RowNumber);
		
	   if (MemberLock) 
	     {
	        if ( ! MemberLock.checked) 
			  {
				FormUnLockRaw(Form, RowNumber);  // Make sure each field is unlocked
				ResetAllField(Form, RowNumber);
				FormPresetRegistrationYear(Form, RowNumber); // update status field
			  }
			  else if (confirm(GetMessage("Row_Number") + RowNumber + GetMessage("Is_Locked")))
			  {
	   			// Force reset
				 MemberLock.checked = false;
				 FormUnLockRaw(Form, RowNumber);
				 ResetAllField(Form, RowNumber);
				 FormPresetRegistrationYear(Form, RowNumber); // update status field
			  }
			  
		 }
	}
	else
	{
		alert("Form not found");
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockRaw(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	    var MemberLock= GetFormMember(Form, 'blands_input_locked__', RowNumber);
		MemberLock.checked = true;

		FormLockCAS(Form, RowNumber, BkgColor);
		FormLockName(Form, RowNumber, BkgColor);
		FormLockEINECS(Form, RowNumber, BkgColor);
		FormLockCMRPBT(Form, RowNumber, BkgColor);
		FormLockR5053(Form, RowNumber, BkgColor);
		FormLockTonnage(Form, RowNumber, BkgColor);
		FormLockRegistrationYear(Form, RowNumber, BkgColor);
		FormLockSimilar(Form, RowNumber, BkgColor);
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockRaw(Form, RowNumber)
{
	if (Form)
	{
	    var MemberLock= GetFormMember(Form, 'blands_input_locked__', RowNumber);
		MemberLock.checked = false;
		
		FormUnLockCAS(Form, RowNumber);
		FormUnLockName(Form, RowNumber);
		FormUnLockEINECS(Form, RowNumber);
		FormUnLockCMRPBT(Form, RowNumber);
		FormUnLockR5053(Form, RowNumber);
		FormUnLockTonnage(Form, RowNumber);
		FormUnLockRegistrationYear(Form, RowNumber);
		FormUnLockSimilar(Form, RowNumber);
		
		FormPresetRegistrationYear(Form, RowNumber); // Take in consideration global option all phase in substances
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormToggleLockRaw(Form, RowNumber, BkgColor)
{
	if (Form)
	{
	   var MemberLock= GetFormMember(Form, 'blands_input_locked__', RowNumber);
	   if (MemberLock) 
	     {
	        if (MemberLock.checked) 
			  {				  
				  FormLockRaw(Form, RowNumber, BkgColor);
			  }
			  else
			  {
				  FormUnLockRaw(Form, RowNumber);
			  }
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockCAS(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member1= GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
	   if (Member1) 
	     {
	        Member1.readOnly=true; 
			Member1.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}
////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockCAS(Form, RowNumber)
{
	if (Form)
	{
	   var Member1= GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
	   if (Member1) 
	     {
	        Member1.readOnly=false; 
			Member1.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockName(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member2= GetFormMember(Form, 'blands_input_substance_name__', RowNumber);
	   if (Member2) 
	     {
	        Member2.readOnly=true; 
			Member2.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockName(Form, RowNumber)
{
	if (Form)
	{
	   var Member2= GetFormMember(Form, 'blands_input_substance_name__', RowNumber);
	   if (Member2) 
	     {
	        Member2.readOnly=false; 
			Member2.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockEINECS(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=true; 
			Member3.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockEINECS(Form, RowNumber)
{
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=false; 
			Member3.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockTonnage(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_tonnage__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=true; 
			Member3.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockTonnage(Form, RowNumber)
{
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_tonnage__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=false; 
			Member3.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockRegistrationYear(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_registration_year__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=true; 
			Member3.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockRegistrationYear(Form, RowNumber)
{
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_registration_year__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=false; 
			Member3.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockCMRPBT(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_cmr_pbt__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=true; 
			//Member3.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockCMRPBT(Form, RowNumber)
{
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_cmr_pbt__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=false; 
			//Member3.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockR5053(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_r50_53__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=true; 
			//Member3.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockR5053(Form, RowNumber)
{
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_r50_53__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=false; 
			//Member3.style.background="white";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormLockSimilar(Form, RowNumber, BkgColor)
{
	BkgColor = (BkgColor) ? BkgColor : "#CCD9FF"
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_similar__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=true; 
			Member3.style.background=BkgColor;
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormUnLockSimilar(Form, RowNumber)
{
	if (Form)
	{
	   var Member3= GetFormMember(Form, 'blands_input_similar__', RowNumber);
	   if (Member3) 
	     {
	        Member3.readOnly=false; 
			Member3.style.background="#E3BCFE";
	     }
	}
	else
	{
		alert("Form not found");
	}
	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsEmptyCAS(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
	   if (Member) 
	     {
	        if (Member.value == "")
			 {
				 return true;  // ok
			 }
			 else
			 {
				 return false; // ok
			 }
	     }
	 return true; // not ok
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsEmptyName(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_substance_name__', RowNumber);
	   if (Member) 
	     {
	        if (Member.value == "")
			 {
				 return true;  // ok
			 }
			 else
			 {
				 return false; // ok
			 }
	     }
	 return true; // not ok
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsEmptyEINECS(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
	   if (Member) 
	     {
	        if (Member.value == "")
			 {
				 return true;  // ok
			 }
			 else
			 {
				 return false; // ok
			 }
	     }
	 return true; // not ok
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsEmptyTonnage(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_tonnage__', RowNumber);
	   if (Member) 
	     {
	        if (Member.value == "")
			 {
				 return true;  // ok
			 }
			 else
			 {
				 return false; // ok
			 }
	     }
	 return true; // not ok
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsEmptyRegistrationYear(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_registration_year__', RowNumber);
	   if (Member) 
	     {
	        if (Member.value == "")
			 {
				 return true;  // ok
			 }
			 else
			 {
				 return false; // ok
			 }
	     }
	 return true; // not ok
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsEmptySimilar(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_similar__', RowNumber);
	   if (Member) 
	     {
	        if (Member.value == "")
			 {
				 return true;  // ok
			 }
			 else
			 {
				 return false; // ok
			 }
	     }
	 return true; // not ok
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}





////////////////////////////////////////////
//
////////////////////////////////////////////
function FormHasEmptyInputs(Form, RowNumber)
{
	if (Form)
	{
		return (FormIsEmptyEINECS(Form, RowNumber) && FormIsEmptyCAS(Form, RowNumber) && FormIsEmptyName(Form, RowNumber));
	}
	else
	{
		alert("Form not found");
		return true; // not ok
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetCAS(Form, RowNumber)
{
	if (Form)
	{
	   FormUnLockCAS(Form, RowNumber);
	   SetFormMemberValue(Form, 'blands_input_cas_number__', "", RowNumber);
	}
	else
	{
		alert("Form not found");
	}	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetName(Form, RowNumber)
{
	if (Form)
	{
	   FormUnLockName(Form, RowNumber);
	   SetFormMemberValue(Form, 'blands_input_substance_name__', "", RowNumber);
	}
	else
	{
		alert("Form not found");
	}	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetEINECS(Form, RowNumber)
{
	if (Form)
	{
	   FormUnLockCAS(Form, RowNumber);
	   SetFormMemberValue(Form, 'blands_input_einecs_number__', "", RowNumber);
	}
	else
	{
		alert("Form not found");
	}	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetTonnage(Form, RowNumber)
{
	if (Form)
	{
	   FormUnLockTonnage(Form, RowNumber);
	   SetFormMemberValue(Form, 'blands_input_tonnage__', "", RowNumber);
	}
	else
	{
		alert("Form not found");
	}	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetStatus(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_status__', RowNumber);
	   	  if (Member) 
	        {
				Member.value = "";
			}
	}
	else
	{
		alert("Form not found");
	}	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetCMRPBT(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_cmr_pbt__', RowNumber);
	   	  if (Member) 
	        {
				Member.checked = false;
				Member.value = "";
			}
	}
	else
	{
		alert("Form not found");
	}	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsSelectedCMRPBT(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_cmr_pbt__', RowNumber);
	   	  if (Member) 
	        {
				return Member.checked;
			}
			else
			{
	  			return false;
			}
	}
	else
	{
		alert("Form not found");
		return false;
	}	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetR5053(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_r50_53__', RowNumber);
	   	  if (Member) 
	        {
				Member.checked = false;
				Member.value = "";
			}
	}
	else
	{
		alert("Form not found");
	}	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetSimilar(Form, RowNumber)
{
	if (Form)
	{
	   FormUnLockSimilar(Form, RowNumber);
	   SetFormMemberValue(Form, 'blands_input_similar__', "", RowNumber);
	}
	else
	{
		alert("Form not found");
	}	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsSelectedR5053(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_r50_53__', RowNumber);
	   	  if (Member) 
	        {
				return Member.checked;
			}
			else
			{
	  			return false;
			}
	}
	else
	{
		alert("Form not found");
		return false;
	}	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsSelectedAllPhaseInSubstances(Form, RowNumber)
{
	if (Form)
	{
	   var Member = Form.blands_assume_phase_in_substances;
	   	  if (Member) 
	        {
				if (Member.checked)
				{
					return true;
				} else if (Member.value != "") // hidden form input
				{
					return true;
				}
				else
				{
					return false;
				}
								
			}
			else
			{
	  			return false;
			}
	}
	else
	{
		alert("Form not found");
		return false;
	}	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormIsSelectedCheckDuplicates(Form, RowNumber)
{
	if (Form)
	{
	   var Member = Form.blands_check_duplicates;
	   	  if (Member) 
	        {
				if (Member.checked)
				{
					return true;
				} else if (Member.value != "") // hidden form input
				{
					return true;
				}
				else
				{
					return false;
				}
								
			}
			else
			{
	  			return false;
			}
	}
	else
	{
		alert("Form not found");
		return false;
	}	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormResetRegistrationYear(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_registration_year__', RowNumber);
	   	  if (Member) 
	        {
				Member.value = "";
			}
	}
	else
	{
		alert("Form not found");
	}	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function FormAccesControlTonnage(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_tonnage__', RowNumber);
	   	  if (Member) 
	        {
				if (Member.readOnly)
				{
					var ExitMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
					ExitMember.focus();
				}
				else
				{
					//FormUnLockRegistrationYear(Form, RowNumber); // to check if necessary
					FormPresetRegistrationYear(Form, RowNumber);
				}
			}
	}
	else
	{
		alert("Form not found");
	}	
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function FormAccesControlRegistrationYear(Form, RowNumber)
{
	if (Form)
	{
	   var Member = GetFormMember(Form, 'blands_input_registration_year__', RowNumber);
	   	  if (Member) 
	        {
				if (Member.readOnly)
				{
					//var ExitMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
					var ExitMember = GetFormMember(Form, 'blands_input_locked__', RowNumber);
					ExitMember.focus();
					//setTimeout('document.forms[\'BlandsForm\']' + '.blands_input_locked__' + RowNumber + '.focus();',100);
				}
				else
				{
					// FormValidateRegistrationYear(Form, RowNumber);
					FormPresetRegistrationYear(Form, RowNumber);
				}
			}
	}
	else
	{
		alert("Form not found");
	}	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormSelectCMRPBT(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_cmr_pbt__', RowNumber);
	   	  if (Member) 
	        {
					Member.checked = true; 
					FormPresetRegistrationYear(Form, RowNumber);
			}
	}
	else
	{
		alert("Form not found");
	}
	
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormToggleCMRPBT(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_cmr_pbt__', RowNumber);
	   	  if (Member) 
	        {
				if (Member.readOnly)
				{
					Member.checked = !Member.checked; // Do nothing, actually
				}
				else
				{
					FormPresetRegistrationYear(Form, RowNumber);
				}
			}
	}
	else
	{
		alert("Form not found");
	}
	
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormSelectR5053(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_r50_53__', RowNumber);
	   	  if (Member) 
	        {
				Member.checked = true; 
				FormPresetRegistrationYear(Form, RowNumber);
			}
	}
	else
	{
		alert("Form not found");
	}
	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function FormToggleR5053(Form, RowNumber)
{
	if (Form)
	{
	   var Member= GetFormMember(Form, 'blands_input_r50_53__', RowNumber);
	   	  if (Member) 
	        {
				if (Member.readOnly)
				{
					Member.checked = !Member.checked; // Do nothing, actually
				}
				else
				{
					FormPresetRegistrationYear(Form, RowNumber);
				}
			}
	}
	else
	{
		alert("Form not found");
	}
	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function IsPhaseInSubstance(Form, RowNumber) {

	if ( ! FormIsEmptyEINECS(Form, RowNumber))
	{
		var EINECSInputMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
		var Value = EINECSInputMember.value + "";
		
     	if ( (Value.charAt(0) == "2") || (Value.charAt(0) == "3"))
		{
			return true;
		} else if (Value.charAt(0) == "4")
		{
			return false;
		} else if (Value.charAt(0) == "5")
		{
			return true;
		} else if (Value.charAt(0) == "6")
		{ // 6xx-xxx-x for newly identified phase-in under REACH.
			return false;
		} else if (Value.charAt(0) == "7")
		{ // 7xx-xxx-x for newly identified non-phase-in substances under REACH.
			return false;
		} else if (Value.charAt(0) == "8")
		{ // 8xx-xxx-x for newly identified substance under REACH.
			return false;
		} else if (Value.charAt(0) == "9")
		{ // 9xx-xxx-x for newly identified substances under REACH.
			return false;
		} else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function GetResolvedEINECS(Form, RowNumber) {

	if ( ! FormIsEmptyEINECS(Form, RowNumber))
	{
		var EINECSInputMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
		var Value = EINECSInputMember.value + "";
		
     	if ( (Value.charAt(0) == "2") || (Value.charAt(0) == "3"))
		{
			return GetMessage("EINECS");
		} else if (Value.charAt(0) == "4")
		{
			return GetMessage("ELINCS");
		} else if (Value.charAt(0) == "5")
		{
			return GetMessage("NLP");
		} else if (Value.charAt(0) == "6")
		{ // 6xx-xxx-x for newly identified phase-in under REACH.
			return GetMessage("EC");
		} else if (Value.charAt(0) == "7")
		{ // 7xx-xxx-x for newly identified non-phase-in substances under REACH.
			return GetMessage("EC");
		} else if (Value.charAt(0) == "8")
		{ // 8xx-xxx-x for newly identified substance under REACH.
			return GetMessage("EC");
		} else if (Value.charAt(0) == "9")
		{ // 9xx-xxx-x for newly identified substances under REACH.
			return GetMessage("EC");
		} else
		{
			// ERROR -Not properly parsed EINECS entry
			//alert("Error in EINECS: "+ Value);
			return "";
		}
	}
	else
	{
		return "";
	}
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function FormGetLimitLegalRegistrationYear(Form, Int_Tonnage, RowNumber)
{
	var CurrentDate = new Date() ;
	var Int_CurrentYear = GetThisYear()

	var Dec_1_2009_PreRegDeadline = new Date(2009,11,1); // yyyy,mm-1,dd
	var Jun_1_2012_PreRegDeadline = new Date(2012,5,1); // yyyy,mm-1,dd
	var Jun_1_2017_PreRegDeadline = new Date(2017,5,1); // yyyy,mm-1,dd
	
	var Reference_2010 = (CurrentDate > Dec_1_2009_PreRegDeadline) ? Int_CurrentYear : 2010
	var Reference_2013 = (CurrentDate > Jun_1_2012_PreRegDeadline) ? Int_CurrentYear : 2013
	var Reference_2018 = (CurrentDate > Jun_1_2017_PreRegDeadline) ? Int_CurrentYear : 2018
	
	var PBT_Txt = ""
	var PBT_Txt = ""
	var PBT_Txt = ""
	var PHASE_IN_Text = GetMessage('PHASE_IN')
	var INQUIRY_Text = GetMessage('INQUIRY')
	
	var PBTData_EC = LookUpECPBT(GetFormMember(Form, 'blands_input_einecs_number__', RowNumber).value);
	var PBTData_CAS = LookUpECPBT(GetFormMember(Form, 'blands_input_cas_number__', RowNumber).value);
	var PBTData = (PBTData_EC) ? PBTData_EC : PBTData_CAS;
	
	if (PBTData)
	{
		var PBT_Status = PBTData[2];
		if (PBT_Status != "" )
		{
			PBT_Txt =  ' ['+PBT_Status+']';
			PHASE_IN_Text += PBT_Txt
			INQUIRY_Text += PBT_Txt
		}
	}
	
	
	if ( IsPhaseInSubstance(Form, RowNumber) || FormIsSelectedAllPhaseInSubstances(Form, RowNumber))
	{
		
		if (Int_Tonnage >= 1000)
		{
			if (CurrentDate > Dec_1_2009_PreRegDeadline) {FormSetStatus(Form, RowNumber, INQUIRY_Text, 6)} else {FormSetStatus(Form, RowNumber, PHASE_IN_Text, 2);}
			return Reference_2010; 
		}
		else if (Int_Tonnage >= 100)
		{
			if ( FormIsSelectedCMRPBT(Form, RowNumber) || FormIsSelectedR5053(Form, RowNumber) )
			{
				if (CurrentDate > Dec_1_2009_PreRegDeadline) {FormSetStatus(Form, RowNumber, INQUIRY_Text, 6)} else {FormSetStatus(Form, RowNumber, PHASE_IN_Text, 2);}
				return Reference_2010;
			}
			else
			{
				if (CurrentDate > Jun_1_2012_PreRegDeadline) {FormSetStatus(Form, RowNumber, INQUIRY_Text, 6)} else {FormSetStatus(Form, RowNumber, PHASE_IN_Text, 2);}
				return Reference_2013;
			}
			
		}
		else if (Int_Tonnage >= 1)
		{
			if ( FormIsSelectedCMRPBT(Form, RowNumber) )
			{
				if (CurrentDate > Dec_1_2009_PreRegDeadline) {FormSetStatus(Form, RowNumber, INQUIRY_Text, 6)} else {FormSetStatus(Form, RowNumber, PHASE_IN_Text, 2);}
				return Reference_2010;
			}
			else
			{
				if (CurrentDate > Jun_1_2017_PreRegDeadline) {FormSetStatus(Form, RowNumber, INQUIRY_Text, 6)} else {FormSetStatus(Form, RowNumber, PHASE_IN_Text, 2);}
				return Reference_2018;
			}
			
		}
		
	}
	else
	{
		//FormSetStatus(Form, RowNumber, GetMessage('INQUIRY'), 6);
		//return 2008;  //  1 June 2008
		FormSetStatus(Form, RowNumber, INQUIRY_Text, 6)
		return Int_CurrentYear;
	}
	
}




////////////////////////////////////////////
//
////////////////////////////////////////////
function FormPresetRegistrationYear(Form, RowNumber)
{
	if (Form)
	{
	   var TonnageMember= GetFormMember(Form, 'blands_input_tonnage__', RowNumber);
	   	  if (TonnageMember) 
	        {
				if (FormIsECExemption(Form, RowNumber))
				{
					SetFormMemberValue(Form, 'blands_input_registration_year__', "Exempted", RowNumber);
					if (FormIsAnnexVExemption(Form, RowNumber))
					{
						FormSetStatus(Form, RowNumber, GetMessage("Annex_V"), 2);
					}
					else
					{
						FormSetStatus(Form, RowNumber, GetMessage("Annex_IV"), 2);
					}
				}
				else if (FormIsEmptyTonnage(Form, RowNumber))
				{
					FormResetRegistrationYear(Form, RowNumber);
					SetFormMemberValue(Form, 'blands_input_registration_year__', "Unselected", RowNumber);
					
					if (! FormIsEmptyEINECS(Form, RowNumber))
					{
						SetStatusFromChangeInEINECS(Form, RowNumber);
					}
					else //if (! FormIsEmptyCAS(Form, RowNumber))
					{
						SetStatusFromChangeInCAS(Form, RowNumber);
					}
				}
				else
				{
					var RegYearMember = GetFormMember(Form, 'blands_input_registration_year__', RowNumber);
					var Int_CurrentSelectedRegYear = isNaN(parseInt(RegYearMember.value)) ? 0: parseInt(RegYearMember.value);
					var Int_Tonnage =  isNaN(parseInt(TonnageMember.value)) ? 0: parseInt(TonnageMember.value);
					var Int_CurrentYear = GetThisYear();

					if (GetResolvedEINECS(Form, RowNumber) == GetMessage('ELINCS'))
					{
						FormSetStatus(Form, RowNumber, GetResolvedEINECS(Form, RowNumber), 2);
					}

					if (Int_Tonnage >= 1)
					{
					   var Int_LegalLimitRegYear = FormGetLimitLegalRegistrationYear(Form, Int_Tonnage, RowNumber);
					   var Int_LimitRegYear = Math.max(Int_CurrentYear, Int_LegalLimitRegYear);  // time advance
					   
					   if (RegYearMember.value == "Registered") 
					   {
						   FormSetStatus(Form, RowNumber, GetResolvedEINECS(Form, RowNumber), 2);
						   return 
					   }
					   
						if (
							(Int_CurrentSelectedRegYear > Int_LimitRegYear) ||
							(Int_CurrentSelectedRegYear < Int_CurrentYear) ||
							(Int_CurrentSelectedRegYear < 2008)   // Registration starts in 2008
							)
						{
							SetFormMemberValue(Form, 'blands_input_registration_year__', Int_LimitRegYear +"", RowNumber);
						}
						
					}
					else
					{
						if ( (Int_Tonnage == 0) // "Unknown"
							 || (Int_CurrentSelectedRegYear <= Int_CurrentYear) )
						{
							SetFormMemberValue(Form, 'blands_input_registration_year__', "Monitoring", RowNumber);
						}
												
						if (! FormIsEmptyEINECS(Form, RowNumber))
						{
							SetStatusFromChangeInEINECS(Form, RowNumber);
						}
							else //if (! FormIsEmptyCAS(Form, RowNumber))
						{
							SetStatusFromChangeInCAS(Form, RowNumber);
						}
											
					}
					
				}

			}
	}
	else
	{
		alert("Form not found");
	}
	
}





////////////////////////////////////////////
//
////////////////////////////////////////////
function FormSetPBTStatus(Form, RowNumber, EC_Number)
{
	if (EC_Number != "")
	{
		var PBTData = LookUpECPBT(EC_Number);
		if (PBTData)
		{
			var PBT_Status = PBTData[2];
			if (PBT_Status != "" )
			{
				FormSetStatus(Form, RowNumber, PBT_Status, 5);
			}
		}
	}
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function SetStatusFromChangeInEINECS(Form, RowNumber)
{

	if ( ! FormIsEmptyEINECS(Form, RowNumber))
	{
		FormSetStatus(Form, RowNumber, GetResolvedEINECS(Form, RowNumber), 0);
	}
	else
	{
		if ( ! FormIsEmptyCAS(Form, RowNumber))
		{
			FormSetStatus(Form, RowNumber, GetMessage('CAS'), 0);
		}
		else
		{
			FormSetStatus(Form, RowNumber, GetMessage('NO_EINECS'), 0);
		}
	}
	
	FormSetPBTStatus(Form, RowNumber, GetFormMember(Form, 'blands_input_einecs_number__', RowNumber).value);
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function UpdateStatusFromChangeInEINECS(Form, RowNumber)
{
  SetStatusFromChangeInEINECS(Form, RowNumber); // Prevent recursive loop
  FormPresetRegistrationYear(Form, RowNumber);
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function SetStatusFromChangeInCAS(Form, RowNumber)
{

	if ( ! FormIsEmptyCAS(Form, RowNumber))
	{
		if (FormIsEmptyEINECS(Form, RowNumber))
		{
			FormSetStatus(Form, RowNumber, GetMessage('CAS'), 0);
		}
	}
	else
	{
		if ( ! FormIsEmptyEINECS(Form, RowNumber))
		{
			FormSetStatus(Form, RowNumber, GetResolvedEINECS(Form, RowNumber), 0);
		}
		else
		{
		 	FormSetStatus(Form, RowNumber, GetMessage('NO_CAS'), 0);
		}
	}
	
	FormSetPBTStatus(Form, RowNumber, GetFormMember(Form, 'blands_input_cas_number__', RowNumber).value);
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function UpdateStatusFromChangeInCAS(Form, RowNumber)
{
	SetStatusFromChangeInCAS(Form, RowNumber);  // Prevent recursive loop
	FormPresetRegistrationYear(Form, RowNumber);
}




function FormIsECExemption(Form, RowNumber)
{ // return ['50-70-4', '200-061-5', 'D-glucitol']
	var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
  	var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
 	return (LookUpECExemption(EINECSMember.value) || LookUpECExemption(CASMember.value));
}


function FormIsAnnexVExemption(Form, RowNumber)
{ 
	var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
  	var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
 	return (LookUpAnnexV(EINECSMember.value) || LookUpAnnexV(CASMember.value));
}


function CheckExemptionFromAnnexIV(Form, EC_Number, RowNumber)
{
	var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
  	var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
  	var SubstanceNameMember = GetFormMember(Form, 'blands_input_substance_name__', RowNumber);

	var Exemption = LookUpECExemption(EC_Number); 
	if (Exemption)
	{
		var CASNumber = Exemption[0];
		var EINECSNumber = Exemption[1];
		var SubstanceName = Exemption[2];
		
		//if (FormIsEmptyEINECS(Form, RowNumber))
		{
			if (EINECSNumber != "") {EINECSMember.value = EINECSNumber;}  // Forced assigment
		}
		
		//if (FormIsEmptyCAS(Form, RowNumber))
		{
			if (CASNumber != "") {CASMember.value = CASNumber;}  // Forced assigment
		}
		
		//if (FormIsEmptyName(Form, RowNumber))
		{
			if (SubstanceName != "") {SubstanceNameMember.value = SubstanceName;} // Forced assigment
		}
		
		UpdateStatusFromChangeInCAS(Form, RowNumber); // Redundant ?
		UpdateStatusFromChangeInEINECS(Form, RowNumber);
	}
}



function CheckAgainstESISDatabase(Form, EC_Number, RowNumber)
{
	var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
  	var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
  	var SubstanceNameMember = GetFormMember(Form, 'blands_input_substance_name__', RowNumber);

	var ESIS_DB_Entry = LookUpEC_ESIS(EC_Number); 
	if (ESIS_DB_Entry)
	{
		var CASNumber = ESIS_DB_Entry[0];
		var EINECSNumber = ESIS_DB_Entry[1];
		var SubstanceName = ESIS_DB_Entry[2];
		
		//if (FormIsEmptyEINECS(Form, RowNumber))
		{
			if (EINECSNumber != "") 
			{
				EINECSMember.value = EINECSNumber;  // Forced assigment
				EvaluateClassification (Form, EINECSNumber, RowNumber);
			} 
		}
		
		//if (FormIsEmptyCAS(Form, RowNumber))
		{
			if (CASNumber != "") 
			{
				CASMember.value = CASNumber; // Forced assigment
				EvaluateClassification (Form, CASNumber, RowNumber);
			}  
		}
		
		//if (FormIsEmptyName(Form, RowNumber))
		{
			if (SubstanceName != "") {SubstanceNameMember.value = SubstanceName;} // Forced assigment
		}
		
		// Not Required here: UpdateStatusFromChangeInCAS(Form, RowNumber); 
		// Not Required here: UpdateStatusFromChangeInEINECS(Form, RowNumber);
	}
	else
	{
	}
}


function EvaluateClassification (Form, CAS_or_EINECS, RowNumber)
{
	if (Is_Class_CMR(CAS_or_EINECS)) 
	{
		FormSelectCMRPBT(Form, RowNumber);
	}

	if (Is_Class_R_50_53(CAS_or_EINECS)) 
	{
		FormSelectR5053(Form, RowNumber);
	}
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function CheckCASNumber(Form, RowNumber) {
  var ParseError = 0;
  var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
  if  (! CASMember.readOnly)
  {
  	//var ParseError = 0;
  	CASMember.value = TrimString(CASMember.value);
		
		if ( ! FormIsEmptyCAS(Form, RowNumber))
		{
			var CAS_Token = new TokenClass(CASMember.value, Parse_CAS_Fct);
	 		ParseError = CAS_Token.Error;
			
	 		if (ParseError) // failed parsing CAS
	 		{
				// Check if input is actually EINECS number
  				var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
				var EINECS_Token = new TokenClass(CASMember.value, Parse_EINECS_Fct); // CAS Value

				if (! EINECS_Token.Error) // success in parsing EINECS
				{
					CASMember.value = "";  // failed in parsing CAS					
					if (! EINECSMember.readOnly)
					{
						EINECSMember.value = EINECS_Token.ParsedToken;
						return CheckEINECSNumber(Form, RowNumber); // Success and EINECS update accordingly
					}
				}
				else
				{
					var PromptValue;
	 				FormSetStatus(Form, RowNumber, GetMessage("Error"), 3);
					PromptValue = window.prompt(GetMessage("Row_Number")+ RowNumber + "] \n" + GetMessage("Error_in_CAS_number") + CASMember.value +'\n' + GetMessage("Please_review_this_input"), CASMember.value);
					if (PromptValue)
					{
						CASMember.value = PromptValue;
					
						if (IsFormLocked(Form, RowNumber))  // Abnomally with FireFox
						{
							CASMember.value = "";   // Force Reset
							CheckCASNumber(Form, RowNumber);   // hide failure
							return true;
						}
						else
						{
							return CheckCASNumber(Form, RowNumber);   // Re-try parsing 
						}
									 
					}
					else
					{
						CASMember.value = "";
						CheckCASNumber(Form, RowNumber);   // hide failure
						return true;
					}		
	 				
				}
	 		}
			else
			{
				CASMember.value = CAS_Token.ParsedToken;
			}
		}
	
	
	
		if (! ParseError)
		{ 
			CheckAgainstESISDatabase(Form, CASMember.value, RowNumber);
			CheckExemptionFromAnnexIV(Form, CASMember.value, RowNumber);
			UpdateStatusFromChangeInCAS(Form, RowNumber);
			EvaluateClassification(Form, CASMember.value, RowNumber);
			
			if (! SetSimilarSubstancesFromEC(Form, RowNumber, GetFormMember(Form, 'blands_input_einecs_number__', RowNumber).value))
			{
				SetSimilarSubstancesFromEC(Form, RowNumber, CASMember.value)
			}
			DisplaySubstanceInformation(CASMember.value)
		}
  }
  return ParseError;
}


////////////////////////////////////////////
//
////////////////////////////////////////////
function CheckEINECSNumber(Form, RowNumber) {
  var ParseError = 0;
  var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
  if  (! EINECSMember.readOnly)
  {
   	//var ParseError = 0;
  	EINECSMember.value = TrimString(EINECSMember.value);
	
		if ( ! FormIsEmptyEINECS(Form, RowNumber))
		{
			var EINECS_Token = new TokenClass(EINECSMember.value, Parse_EINECS_Fct);
	 		ParseError = EINECS_Token.Error;
	
	 		if (ParseError) // failed parsing EINECS
	 		{
				// Check if input is actually CAS number
  				var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
				var CAS_Token = new TokenClass(EINECSMember.value, Parse_CAS_Fct); // EINECS Value
				
				if (! CAS_Token.Error) // success in parsing CAS
				{
					EINECSMember.value = "";  // failed in parsing EINECS					
					if (! CASMember.readOnly)
					{
						CASMember.value = CAS_Token.ParsedToken;
						return CheckCASNumber(Form, RowNumber); // Success and CAS update accordingly
					}
				}
				else
				{
					var PromptValue;
	 				FormSetStatus(Form, RowNumber, GetMessage("Error"), 3);
					PromptValue = window.prompt(GetMessage("Row_Number")+ RowNumber + "] \n" + GetMessage("Error_in_EINECS_number") + EINECSMember.value +'\n' + GetMessage("Please_review_this_input"), EINECSMember.value);
					if (PromptValue)
					{
						EINECSMember.value = PromptValue;
						
						if (IsFormLocked(Form, RowNumber))  // Abnomally with FireFox
						{
							EINECSMember.value = "";   // Force Reset
							CheckEINECSNumber(Form, RowNumber); // hide failure
							return true;
						}
						else
						{
							return CheckEINECSNumber(Form, RowNumber);   // Re-try parsing
						}
									 
					}
					else
					{
						EINECSMember.value = "";
						CheckEINECSNumber(Form, RowNumber); // hide failure
						return true;
					}
					
				}
	 		}
			else
			{
				EINECSMember.value = EINECS_Token.ParsedToken;
			}
		}
	
	
	
		if (! ParseError)
		{ 
			CheckAgainstESISDatabase(Form, EINECSMember.value, RowNumber);
			CheckExemptionFromAnnexIV(Form, EINECSMember.value, RowNumber);
			UpdateStatusFromChangeInEINECS(Form, RowNumber);
			EvaluateClassification(Form, EINECSMember.value, RowNumber);
			
			if (! SetSimilarSubstancesFromEC(Form, RowNumber, EINECSMember.value))
			{
				SetSimilarSubstancesFromEC(Form, RowNumber, GetFormMember(Form, 'blands_input_cas_number__', RowNumber).value)
			}
			DisplaySubstanceInformation(EINECSMember.value)
		}
  }
  return ParseError;
}

////////////////////////////////////////////
//
////////////////////////////////////////////
function CheckSubstanceName(Form, RowNumber) {
 var ParseError = 0;
 var SubstanceNameMember = GetFormMember(Form, 'blands_input_substance_name__', RowNumber);
  if  (! SubstanceNameMember.readOnly)
  {
    //var ParseError = 0;
 	//SubstanceNameMember.value = TrimString(SubstanceNameMember.value.toLowerCase());

	    SubstanceNameMember.value = TrimString(SubstanceNameMember.value);
		SubstanceNameMember.value = TrimDashes(SubstanceNameMember.value);  // remove leading/trailing ---
	
		//alert("SubstanceNameMember.value: " + SubstanceNameMember.value)
		
		if (ISSimilarDatabaseSearchEnabled() || ISSimilarDatabaseSearchAndEchoEnabled())
		{
			var SimGroupEntryList = null
			var FormulaQuery = SubstanceNameMember.value.replace(/\s+/g, '')  // remove all spaces
			FormulaQuery = FormulaQuery.replace(/^\[\d*\]\s*/, '') // Supress lead [dddd..]
			
			if ((FormulaQuery.indexOf("%") != -1) && (FormulaQuery))
			{
				var WildCharsCount = FormulaQuery.match(new RegExp("%", "g")).length 
				if (WildCharsCount >=2)
				{
					if (
						(FormulaQuery.indexOf("%") == 0) &&
						(FormulaQuery.lastIndexOf("%") == (FormulaQuery.length -1))
						)
					{
						FormulaQuery = TrimString(TrimPercents(FormulaQuery))				
						SimGroupEntryList = GetSimGroupEntryListFromSubFormula(FormulaQuery)
						FormulaQuery = "%"+FormulaQuery+"%"		
					}
				}
				else if (FormulaQuery.indexOf("%") == 0)
				{
					FormulaQuery = TrimString(TrimPercents(FormulaQuery))				
					SimGroupEntryList = GetSimGroupEntryListFromEndingFormula(FormulaQuery)
					FormulaQuery = "%"+FormulaQuery	
				}
				else if (FormulaQuery.lastIndexOf("%") == (FormulaQuery.length -1))
				{
					FormulaQuery = TrimString(TrimPercents(FormulaQuery))				
					SimGroupEntryList = GetSimGroupEntryListFromStartFormula (FormulaQuery)
					FormulaQuery += "%"		
				}
			}
			else
			{
				SimGroupEntryList = GetSimGroupEntryListFromExactFormula(FormulaQuery)
			}
			
			if (SimGroupEntryList)
			{
				var n = SimGroupEntryList.length
				if (n > 1)
				{
					SubstanceNameMember.value = "[" + n + "] " + FormulaQuery;  
					DisplayFormulaQuery(SimGroupEntryList, FormulaQuery)
					return false; // Stop process - return error status
				}
				else
				{
					var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
					EINECSMember.value = SimGroupEntryList[0].EC;
					SubstanceNameMember.value = "";  // failed in parsing Chemical Name	
					ParseError = true;
					return CheckEINECSNumber(Form, RowNumber); // Success and EINECS update accordingly
				}
  			}
		}

	
		if ( ! FormIsEmptyName(Form, RowNumber))
		{
			var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
			var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
			
			var EINECS_Token = new TokenClass(SubstanceNameMember.value, Parse_EINECS_Fct);

			//alert (EINECS_Token.ParsedToken + ": LookUpEINECS_ESIS"+ LookUpEINECS_ESIS(EINECS_Token.ParsedToken));
			if ((!EINECS_Token.Error) && (LookUpEINECS_ESIS(EINECS_Token.ParsedToken)))  // try full lookup first
			{
				// Identified valid EINECS Number				
				if (! EINECSMember.readOnly)
				{
					EINECSMember.value = EINECS_Token.ParsedToken;
				   	SubstanceNameMember.value = "";  // failed in parsing Chemical Name	
					ParseError = true;
					return CheckEINECSNumber(Form, RowNumber); // Success and EINECS update accordingly
				}
			
			}
			else
			{
			
			var CAS_Token = new TokenClass(SubstanceNameMember.value, Parse_CAS_Fct);
			var EINECS_Token = new TokenClass(SubstanceNameMember.value, Parse_EINECS_Fct);

	 		if (
				((!CAS_Token.Error) && (!CAS_Token.HasCar)) 
				|| ((!CAS_Token.Error) && (((CAS_Token.CharString.length - CAS_Token.IntegerString.length)) < Math.round(3.0*CAS_Token.IntegerString.length))) 
				)
	 		{
				// Identified valid CAS Number				
				SubstanceNameMember.value = "";  // failed in parsing Chemical Name	
				ParseError = true;
				if (! CASMember.readOnly)
				{
					CASMember.value = CAS_Token.ParsedToken;
					return CheckCASNumber(Form, RowNumber); // Success and CAS update accordingly
				}
			} else
	 		if (
				((!EINECS_Token.Error) && (!EINECS_Token.HasCar)) 
				|| ((!EINECS_Token.Error) && (((EINECS_Token.CharString.length - EINECS_Token.IntegerString.length)) < Math.round(3.0*EINECS_Token.IntegerString.length))) 
				)
	 		{
				// Identified valid EINECS Number				
				SubstanceNameMember.value = "";  // failed in parsing Chemical Name					
				ParseError = true;
				if (! EINECSMember.readOnly)
				{
					EINECSMember.value = EINECS_Token.ParsedToken;
					return CheckEINECSNumber(Form, RowNumber); // Success and EINECS update accordingly
				}
			} else
			if (
				 ((!CAS_Token.Error) && (!CAS_Token.HasCar)) ||
				 ((!EINECS_Token.Error) && (!EINECS_Token.HasCar)) ||
				CAS_Token.DigitsOnly ||
				EINECS_Token.DigitsOnly
				)
	 		{
				var PromptValue;
				ParseError = true;
	 			FormSetStatus(Form, RowNumber, GetMessage("Error"), 3);
				PromptValue = window.prompt(GetMessage("Row_Number")+ RowNumber + "] \n" + GetMessage("Error_in_substance_name") + SubstanceNameMember.value +'\n' + GetMessage("Please_review_this_input"), SubstanceNameMember.value);
				if (PromptValue)
				{
					SubstanceNameMember.value = PromptValue;
					
					if (IsFormLocked(Form, RowNumber))  // Abnomally with FireFox
					{
						SubstanceNameMember.value = "";   // Force Reset
						CheckSubstanceName(Form, RowNumber);  //hide failure
						return true; // failure
					}
					else
					{
						return CheckSubstanceName(Form, RowNumber);
					}
									 
				}
				else
				{
					SubstanceNameMember.value = "";
					CheckSubstanceName(Form, RowNumber); // hide failure
					return true; // failure
				}
				
	 			
	 		}
			
		  }
		}
		
		if (!ParseError)
		{
			if (! FormIsEmptyEINECS(Form, RowNumber))
				{
					UpdateStatusFromChangeInEINECS(Form, RowNumber); // Calls also
				}
				else 
				{
					UpdateStatusFromChangeInCAS(Form, RowNumber); // Calls also
				}
		}

  	}

	return ParseError;
}



////////////////////////////////////////////
//
////////////////////////////////////////////
function FormSetStatus(Form, RowNumber, Message, Level) {
	if (Message != "")
	{
		var StatusMember = GetFormMember(Form, 'blands_input_status__', RowNumber);
				
		if (Message.length > 13) {StatusMember.style.fontSize='10px';}
		//if (Message.length > 18) {StatusMember.style.fontSize='9px';}

		if (Level == 0)  
		{
			StatusMember.style.background="#CCD9FF";  // Default color
		}
		else if (Level == 1) 
		{
			StatusMember.style.background="white"; // White background
		}
		else if (Level == 2) 
		{
			StatusMember.style.background="yellow"; // Yellow
		}
		else if (Level == 3)
		{
			StatusMember.style.background="red";  // Red 
			StatusMember.focus();
		}
		else if (Level == 4)
		{
			StatusMember.style.background="#9DFF9D";  // Green
		}
		else if (Level == 5)
		{
			StatusMember.style.background="#CC66FF";  // Purple
		}
		else if (Level == 6)
		{
			StatusMember.style.background="#FFCC33";  // Orange
		}

 		SetFormMemberValue(Form, 'blands_input_status__', Message, RowNumber);
	}
}


function SearchDatabaseCASNumber(SearchNode, Database, DisplayWIN, RowNumber) {
var BlandsForm = document.forms['BlandsForm'];
if (!BlandsForm) { BlandsForm = document.BlandsForm;}

var CAS_Number = GetFormMember(BlandsForm, 'blands_input_cas_number__', RowNumber).value;

CAS_Number = TrimString(CAS_Number); // remove trailing and leading white spaces

if ( CAS_Number != "")
{
	var ChemNameInputMember = GetFormMember(BlandsForm, 'blands_input_substance_name__', RowNumber);
	var DummyName = (TrimString(ChemNameInputMember.value) != "") ? ChemNameInputMember.value : "name" ;
	CheckDatabaseCASNumber(CAS_Number, DummyName, Database, DisplayWIN);
}
else 
{
	var EINECSInputMember = GetFormMember(BlandsForm, 'blands_input_einecs_number__', RowNumber);
	if (EINECSInputMember.value != "")
	{
		CheckDatabaseEINECSNumber(EINECSInputMember.value, DisplayWIN);
		FormLockEINECS(BlandsForm, RowNumber);
	}
	else
	{
		var ChemNameInputMember = GetFormMember(BlandsForm, 'blands_input_substance_name__', RowNumber);
		if (ChemNameInputMember.value != "")
		{
			var DummyCAS = (TrimString(CAS_Number) != "") ? CAS_Number : "value" ;
			CheckDatabaseChemicalName(ChemNameInputMember.value, DummyCAS, Database, DisplayWIN);
		}
		else
		{
			alert(GetMessage("Row_Number") + RowNumber + GetMessage("No_Search_Data"));
			FormSetStatus(BlandsForm, RowNumber, GetMessage('NO_DATA'), 2);
			FormFocusOnCAS(BlandsForm, RowNumber);
		}
		
	}
	
}
	
	
}



function SearchDatabaseChemicalName(SearchNode, Database, DisplayWIN, RowNumber) {
var BlandsForm = document.forms['BlandsForm'];
if (!BlandsForm) { BlandsForm = document.BlandsForm;}	

var Substance_Name = GetFormMember(Form, 'blands_input_substance_name__', RowNumber).value;

//Substance_Name = TrimString(Substance_Name); // remove trailing and leading white spaces

var CASInputMember = GetFormMember(BlandsForm, 'blands_input_cas_number__', RowNumber);

if ( CASInputMember.value != "")
{
	var DummyName = (TrimString(Substance_Name) != "") ? Substance_Name : "name" ;
	CheckDatabaseCASNumber(CASInputMember.value, DummyName, Database, DisplayWIN);
}
else 
{
	var EINECSInputMember = GetFormMember(BlandsForm, 'blands_input_einecs_number__', RowNumber);
	if (EINECSInputMember.value != "")
	{
		CheckDatabaseEINECSNumber(EINECSInputMember.value, DisplayWIN);
	}
	else
	{
		var ChemNameInputMember = GetFormMember(BlandsForm, 'blands_input_substance_name__', RowNumber);
		if (ChemNameInputMember.value != "")
		{
			var DummyCAS = (TrimString(CASInputMember.value) != "") ? CASInputMember.value : "value" ;
			CheckDatabaseChemicalName(ChemNameInputMember.value, DummyCAS, Database, DisplayWIN);
		}
		else
		{
			alert(GetMessage("Row_Number") + RowNumber + GetMessage("No_Search_Data"));
			FormSetStatus(BlandsForm, RowNumber, GetMessage('NO_DATA'), 2);
			FormFocusOnName(BlandsForm, RowNumber);
		}
		
	}
	
}
	
	
}




function SearchDatabaseEINECSNumber(SearchNode, Database, DisplayWIN, RowNumber) {
var BlandsForm = document.forms['BlandsForm'];
if (!BlandsForm) { BlandsForm = document.BlandsForm;}	

var EINECS_Number = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber).value;

EINECS_Number = TrimString(EINECS_Number); // remove trailing and leading white spaces

if ( EINECS_Number != "")
{
	CheckDatabaseEINECSNumber(EINECS_Number, DisplayWIN);
}
else 
{
	var CASInputMember = GetFormMember(BlandsForm, 'blands_input_cas_number__', RowNumber);
	if (CASInputMember.value != "")
	{
		CheckDatabaseQueryEINECSFromCAS(CASInputMember.value, DisplayWIN);
		FormLockCAS(BlandsForm, RowNumber);
	}
	else
	{
		var ChemNameInputMember = GetFormMember(BlandsForm, 'blands_input_substance_name__', RowNumber);
		if (ChemNameInputMember.value != "")
		{
			CheckDatabaseQueryEINECSFromChemicalName(ChemNameInputMember.value, DisplayWIN);
		}
		else
		{
			alert(GetMessage("Row_Number") + RowNumber + GetMessage("No_Search_Data"));
			FormSetStatus(BlandsForm, RowNumber, GetMessage('NO_DATA'), 2);
			FormFocusOnEINECS(BlandsForm, RowNumber);
		}
		
	}
	
}
		
}



//var DteDuJ = new Date() ;
//var DteFin = new Date(2018,5,1); // yyyy,mm-1,dd
//if (DteDuJ >= DteFin) {top.location.href="expired-demo.html";}

////////////////////////////////////////////////////////////////////


function IsMCDataBlockEmpty(Form, RowNumber)
{
	var IsEmpty = false
	var FirstNameNode =	document.getElementById('firstname'); 
	var LastNameNode =	document.getElementById('lastname'); 
	
	IsEmpty = ((FirstNameNode.value == "") && (LastNameNode.value == ""))
	if (! IsEmpty) { return false; } // Early termination
	
	IsEmpty = IsMCOrganisationBlockEmpty(Form, RowNumber)
	if (! IsEmpty) { return false;}

	IsEmpty = IsMCInformationBlockEmpty(Form, RowNumber)
	if (! IsEmpty) { return false;}
	
	return IsEmpty 
}

function IsMCOrganisationBlockEmpty(Form, RowNumber)
{
	var IsEmpty = false
	var OrganisationNode =	document.getElementById('company');
	var DeptNode =	document.getElementById('dept');
	var WebsitesNode =	document.getElementById('websites'); 
	IsEmpty = ((OrganisationNode.value == "") && (DeptNode.value == "") && (WebsitesNode.value == ""))
	return IsEmpty 
}


function IsMCInformationBlockEmpty(Form, RowNumber)
{
	var IsEmpty = false
	var PhoneNode =	document.getElementById('telephones'); 
	var FaxNode =	document.getElementById('faxes');
	var EmailNode =	document.getElementById('emails');
	
	IsEmpty = ((PhoneNode.value == "") && (FaxNode.value == "") && (EmailNode.value == ""))
	if (! IsEmpty) { return false; }
	
	IsEmpty = IsMCPostalAddressBlockEmpty(Form, RowNumber)
	if (! IsEmpty) { return false; }
	
	return IsEmpty 
}


function IsMCPostalAddressBlockEmpty(Form, RowNumber)
{
	var IsEmpty = false
	var StreetNode = document.getElementById('address');
	var PostalCodeNode = document.getElementById('zipcode');
	var CityNode = document.getElementById('city');
	var CountryNode = document.getElementById('country'); 
	
	IsEmpty = (
			   	(StreetNode.value == "") && 
				(PostalCodeNode.value == "") && 
				(CityNode.value == "") && 
				(CountryNode.value == "")
			   )
	
	return IsEmpty 
}





function CheckMCDataBlock(Form, RowNumber, ColorMode, OKColor, MinChars)
{
	var FirstNameNode =	document.getElementById('firstname'); 
	var LastNameNode =	document.getElementById('lastname'); 
	
	var TrueStatus1 = FormCheckthisInputNode(FirstNameNode, ColorMode, OKColor, MinChars)
	var TrueStatus2 = FormCheckthisInputNode(LastNameNode, ColorMode, OKColor, MinChars)
	var TrueStatus3 = CheckMCOrganisationBlock(Form, RowNumber, ColorMode, OKColor, MinChars)
	var TrueStatus4 = CheckMCInformationBlock(Form, RowNumber, ColorMode, OKColor, MinChars)
	
	return (TrueStatus1 && TrueStatus2 && TrueStatus3 && TrueStatus4) 
}


function CheckMCOrganisationBlock(Form, RowNumber, ColorMode, OKColor, MinChars)
{
	var OrganisationNode =	document.getElementById('company'); 
	var DeptNode =	document.getElementById('dept'); 
	var WebsitesNode =	document.getElementById('websites'); 

	var TrueStatus1 = FormCheckthisInputNode(OrganisationNode, ColorMode, OKColor, MinChars)
	var TrueStatus2 = FormCheckthisInputNode(DeptNode, ColorMode, OKColor, 0)
	var TrueStatus3 = FormCheckthisInputNode(WebsitesNode, ColorMode, OKColor, 0)

	return (TrueStatus1 && TrueStatus2 && TrueStatus3) 
}

function CheckMCInformationBlock(Form, RowNumber, ColorMode, OKColor, MinChars)
{
	var PhoneNode =	document.getElementById('telephones');
	var FaxNode =	document.getElementById('faxes');
	var EmailNode =	document.getElementById('emails'); 
	
	var TrueStatus1 = CheckFormPhoneInput(PhoneNode)
	if ((TrueStatus1 == false) || ((PhoneNode.value == "") && (MinChars != 0)))
	{
		PhoneNode.focus();
		FormCheckthisInputNode(PhoneNode, ColorMode, OKColor, PhoneNode.value.length +1)  // flag error
	}
	else
	{
		FormCheckthisInputNode(PhoneNode, ColorMode, OKColor, PhoneNode.value.length)  // Accept input
	}
	
	var TrueStatus2 = CheckFormPhoneInput(FaxNode)
	if (TrueStatus2 == false)
	{
		FaxNode.focus();
		FormCheckthisInputNode(FaxNode, ColorMode, OKColor, FaxNode.value.length +1)  // flag error
	}
	else
	{
		FormCheckthisInputNode(FaxNode, ColorMode, OKColor, FaxNode.value.length)  // Accept input
	}
		
	var TrueStatus3 = CheckFormEmailInputs(EmailNode);
	if ((TrueStatus3 == false) || ((EmailNode.value == "") && (MinChars != 0)))
	{
		EmailNode.focus();
		FormCheckthisInputNode(EmailNode, ColorMode, OKColor, EmailNode.value.length +1)  // flag error
	}
	else
	{
		FormCheckthisInputNode(EmailNode, ColorMode, OKColor, EmailNode.value.length)  // Accept input
	}


	var TrueStatus4 = CheckMCPostalAddressBlock(Form, RowNumber, ColorMode, OKColor, MinChars)

	return (TrueStatus1 && TrueStatus2 && TrueStatus3 && TrueStatus4) 
}

function CheckMCPostalAddressBlock(Form, RowNumber, ColorMode, OKColor, MinChars)
{
	var StreetNode = document.getElementById('address');
	var PostalCodeNode = document.getElementById('zipcode'); 
	var CityNode = document.getElementById('city');
	var CountryNode = document.getElementById('country');
	
	var TrueStatus1 = FormCheckthisInputNode(StreetNode, ColorMode, OKColor, MinChars)
	var TrueStatus2 = FormCheckthisInputNode(PostalCodeNode, ColorMode, OKColor, MinChars)
	var TrueStatus3 = FormCheckthisInputNode(CityNode, ColorMode, OKColor, MinChars)
	var TrueStatus4 = FormCheckthisInputNode(CountryNode, ColorMode, OKColor, ((MinChars) ? 2 : MinChars))

	return (TrueStatus1 && TrueStatus2 && TrueStatus3 && TrueStatus4) 
}



function CheckMCInputs(Form, Node, RowNumber, ColorMode, OKColor, MinChars)
{
	var Status
	ColorMode = (ColorMode) ? ColorMode : 3 ;
	OKColor = (OKColor) ? OKColor : "#FFCC66" ;
	MinChars = (MinChars) ? MinChars : 2
	
	if (! Node) { alert("CheckMCInputs: Node not found"); return}
	if (Form)
	{ 
		if (Node) {Node.value = TrimString(Node.value)}
		
		Status = CheckMCDataBlock(Form, RowNumber, ColorMode, OKColor, MinChars) 

		if (IsMCDataBlockEmpty(Form, RowNumber))
		{
			CheckMCDataBlock(Form, RowNumber, ColorMode, OKColor, 0) // Reset status of the input fields	
		}
	
	}
	else
	{
		alert("Form not found");
	}
	
}


////////////////////////////////////////////////////////////////////


function VerifyAllSubstances(Form, Table_ID) {
	
	if (Form)
	{

		var RawCounterElement = GetFormMemberByID(Form, 'blands_row_counter');
		var row = document.getElementById(Table_ID).rows.item(0);  // 1st row
		var MaxRow = row.parentNode.rows.length;
		
		//var MaxRow = parseInt(RawCounterElement.value);
	
		for (var RowNumber = 1; RowNumber <= MaxRow ; ++RowNumber)
		{	
  			var RowMember = GetFormMember(Form, 'blands_input_row__', RowNumber);
			
			if ((RowMember)  && (! IsFormLocked(Form, RowNumber))) // Row exists & not lockeck
			{
  				var CASMember = GetFormMember(Form, 'blands_input_cas_number__', RowNumber);
  				var EINECSMember = GetFormMember(Form, 'blands_input_einecs_number__', RowNumber);
				var SubstanceNameMember = GetFormMember(Form, 'blands_input_substance_name__', RowNumber);

				//alert("VerifyAllSubstances :" + RowNumber);
			
  				if  (CASMember.value != "") // Initiate the process with CAS first !
  				{
					var ReadOnlyOldState = CASMember.readOnly;
				
					CASMember.readOnly =  false; // Disable ReadOnly if any
					FormResetCMRPBT(Form, RowNumber); FormResetR5053(Form, RowNumber);
					CheckCASNumber(Form, RowNumber);
					CASMember.readOnly = ReadOnlyOldState;  // restaure old state
  				} else if (EINECSMember.value != "")
				{
					var ReadOnlyOldState = EINECSMember.readOnly;
				
					EINECSMember.readOnly =  false; // Disable ReadOnly if any
					FormResetCMRPBT(Form, RowNumber); FormResetR5053(Form, RowNumber);
					CheckEINECSNumber(Form, RowNumber);
					EINECSMember.readOnly = ReadOnlyOldState;  // restaure old state
				} else if  ( (SubstanceNameMember.value != "") && (ISSimilarDatabaseSearchEnabled()))
  				{
					var ReadOnlyOldState = SubstanceNameMember.readOnly;
				
					SubstanceNameMember.readOnly =  false; // Disable ReadOnly if any
					FormResetCMRPBT(Form, RowNumber); FormResetR5053(Form, RowNumber);
					CheckSubstanceName(Form, RowNumber);
					SubstanceNameMember.readOnly = ReadOnlyOldState;  // restaure old state
  				}
			} else
			{
				//alert ("ROW: " + RowNumber + " does not exist !");
			}
		}
		
	}
}

function Database_Loaded() {
	var Form = document.forms['BlandsForm'];
	if (!Form) { Form = document.BlandsForm;}	

	VerifyAllSubstances(Form, "SubstanceList");
}


////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////


function GetExemptedCASArray() {return Global_ExemptedCASArray;}
function GetExemptedEINECSArray() {return Global_ExemptedEINECSArray;}

function Get_ESIS_CAS_Database() {return Global_ESIS_CAS_Database;}
function Get_ESIS_EC_Database() {return Global_ESIS_EC_Database;}

function GetAnnexVCASArray() {return Global_AnnexVCASArray;}
function GetAnnexVECArray() {return Global_AnnexVECArray;}

function Get_ESIS_ELINCS_EINECS_Database() {return Global_ESIS_ELINCS_EINECS_Database;}



function LookUpCASExemption(EC_Number)
{
	var ExemptionArray = GetExemptedCASArray();
	if (ExemptionArray)
	{
		return ExemptionArray[EC_Number];
	}
	else
	{
		return null;
	}
}


function LookUpCAS_ESIS(EC_Number)
{
	var ESIS_CAS_Database = Get_ESIS_CAS_Database();
	if (ESIS_CAS_Database)
	{
		return ESIS_CAS_Database[EC_Number];
	}
	else
	{
		return null;
	}
}

function LookUpCASAnnexV(EC_Number)
{
	var AnnexVArray = GetAnnexVCASArray();
	if (AnnexVArray)
	{
		return AnnexVArray[EC_Number];
	}
	else
	{
		return null;
	}
}


function LookUpEINECSExemption(EC_Number)
{
	var ExemptionArray = GetExemptedEINECSArray();
	if (ExemptionArray)
	{
		return ExemptionArray[EC_Number];
	}
	else
	{
		return null;
	}
}


function LookUpEINECS_ESIS(EC_Number)
{
	var ESIS_EC_Database = Get_ESIS_EC_Database();
	if (ESIS_EC_Database)
	{
		return ESIS_EC_Database[EC_Number];
	}
	else
	{
		return null;
	}
}

function LookUpECAnnexV(EC_Number)
{
	var AnnexVArray = GetAnnexVECArray();
	if (AnnexVArray)
	{
		return AnnexVArray[EC_Number];
	}
	else
	{
		return null;
	}
}



function LookUpECExemption(EC_Number)
{
	return (
			( LookUpCASExemption(EC_Number) || LookUpEINECSExemption(EC_Number) ) 
			 || LookUpAnnexV(EC_Number)
			);
}

function LookUpAnnexV(EC_Number)
{
	return (
			( LookUpCASAnnexV(EC_Number) || LookUpECAnnexV(EC_Number) )
			);
}


function LookUpEC_ESIS(EC_Number)
{
	return (( LookUpCAS_ESIS(EC_Number) || LookUpEINECS_ESIS(EC_Number) ));
}


function SelfTestCASArray(CASArray)
{
	for (var CAS in CASArray)
  	{
		if  (! (CASArray[CAS][0] == CAS) && (CASArray[CAS][0] != CASArray[CAS][1]))
		{
			alert (" Error in CASArray. \n CASArray['" + CAS + "'] = ['" + CASArray[CAS][0] + "', '" + CASArray[CAS][1] + "', '" + CASArray[CAS][2] + "'];"); 
		}
  	}
}

function SelfTestEINECSArray(EINECSArray)
{
	for (var EINECS in EINECSArray)
  	{
		if  (! (EINECSArray[EINECS][1] == EINECS) && (EINECSArray[EINECS][0] != EINECSArray[EINECS][1]))
		{
			alert (" Error in EINECSArray. \n EINECSArray['" + EINECS + "'] = ['" + EINECSArray[EINECS][0] + "', '" + EINECSArray[EINECS][1] + "', '" + EINECSArray[EINECS][2] + "'];"); 
		}
  	}
}


function ShowEINECSArray(EINECSArray)
{
	for (var EINECS in EINECSArray)
  	{
		alert ("EINECSArray['" + EINECS + "'] = ['" + EINECSArray[EINECS][0] + "', '" + EINECSArray[EINECS][1] + "', '" + EINECSArray[EINECS][2] + "'];"); 
  	}
}


function PopulateEINECSArrayFromCASArray(CASArray, EINECSArray)
{
	//SelfTestCASArray(CASArray);	
	
	for (var CAS in CASArray)
  	{		
		if (CASArray[CAS][1] != "")
		{
			EINECSArray[CASArray[CAS][1]] = CASArray[CAS];		
		}
  	}
	//SelfTestEINECSArray(EINECSArray);
	
	Database_Loaded(); // Checking Substances data
}

function PopulateCASArrayFromEINECSArray(EINECSArray, CASArray)
{
	//SelfTestEINECSArray(EINECSArray);	
	
	for (var EINECS in EINECSArray)
  	{		
		if (EINECSArray[EINECS][0] != "")
		{
			CASArray[EINECSArray[EINECS][0]] = EINECSArray[EINECS];	
		}
  	}
	//SelfTestCASArray(CASArray);
	
	Database_Loaded(); // Checking Substances data
}


function PopulateECArrayFromCASArray(AnnexVCASArray, AnnexVECArray)
{
	PopulateEINECSArrayFromCASArray(AnnexVCASArray, AnnexVECArray)
}

function PopulateCASArrayFromCASArray(CAS_SourceArray, CASArray)
{
	PopulateCASArrayFromEINECSArray(CAS_SourceArray, CASArray);
}

function PopulateEINECSArrayFromEINECSArray(EINECS_SourceArray, EINECSArray)
{
	PopulateEINECSArrayFromCASArray(EINECS_SourceArray, EINECSArray);
}


var Global_ExemptedCASArray = new Array();
var Global_ExemptedEINECSArray = new Array();

var Global_ESIS_CAS_Database = new Array(); // ESIS CAS DB
var Global_ESIS_EC_Database = new Array(); // ESIS EINECS/NLP (ELINCS) DB
var Global_ESIS_ELINCS_EINECS_Database = new Array(); // Intermediate DB,  ELINCS to EC

var Global_AnnexVCASArray = new Array();
var Global_AnnexVECArray = new Array();

var i_counter =0 ;

Global_ExemptedCASArray['50-70-4'] = ['50-70-4', '200-061-5', 'D-glucitol']; 
Global_ExemptedCASArray['50-81-7'] = ['50-81-7', '200-066-2', 'Ascorbic acid']; 
Global_ExemptedCASArray['50-99-7'] = ['50-99-7', '200-075-1', 'Glucose'];
Global_ExemptedCASArray['56-87-1'] = ['56-87-1', '200-294-2', 'L-lysine']; 
Global_ExemptedCASArray['57-48-7'] = ['57-48-7', '200-333-3', 'Fructose'];   // <-- New: Reg. (EC) 987/2008, October 2008 
//Global_ExemptedCASArray['57-10-3'] = ['57-10-3', '200-312-9', 'Palmitic acid, pure'];
//Global_ExemptedCASArray['57-11-4'] = ['57-11-4', '200-313-4', 'Stearic acid, pure'];
Global_ExemptedCASArray['57-50-1'] = ['57-50-1', '200-334-9', 'Sucrose, pure'];
Global_ExemptedCASArray['58-95-7'] = ['58-95-7', '200-405-4', 'a-tocopheryl acetate'];
Global_ExemptedCASArray['59-23-4'] = ['59-23-4', '200-416-4', 'Galactose'];   // <-- New: Reg. (EC) 987/2008, October 2008 
Global_ExemptedCASArray['59-51-8'] = ['59-51-8', '200-432-1', 'DL-methionine'];
Global_ExemptedCASArray['63-42-3'] = ['63-42-3', '200-559-2', 'Lactose'];   // <-- New: Reg. (EC) 987/2008, October 2008 
Global_ExemptedCASArray['69-65-8'] = ['69-65-8', '200-711-8', 'D-mannitol'];
Global_ExemptedCASArray['87-79-6'] = ['87-79-6', '201-771-8', '1-sorbose'];
//Global_ExemptedCASArray['112-80-1'] = ['112-80-1', '204-007-1', 'Oleic acid, pure'];
Global_ExemptedCASArray['123-94-4'] = ['123-94-4', '204-664-4', 'Glycerol stearate, pure'];
Global_ExemptedCASArray['124-38-9'] = ['124-38-9', '204-696-9', 'Carbon dioxide'];
Global_ExemptedCASArray['137-08-6'] = ['137-08-6', '205-278-9', 'Calcium pantothenate, D-form C9H17NO5.1/2Ca'];
//Global_ExemptedCASArray['143-07-7'] = ['143-07-7', '205-582-1', 'Lauric acid, pure'];
//Global_ExemptedCASArray['143-18-0'] = ['143-18-0', '205-590-5', 'Potassium oleate'];
Global_ExemptedCASArray['150-30-1'] = ['150-30-1', '205-756-7', 'DL-phenylalanine'];
Global_ExemptedCASArray['527-07-1'] = ['527-07-1', '208-407-7', 'Sodium gluconate'];
//Global_ExemptedCASArray['822-16-2'] = ['822-16-2', '212-490-5', 'Sodium stearate, pure'];
//Global_ExemptedCASArray['1317-65-3'] = ['1317-65-3', '215-279-6', 'Limestone'];
Global_ExemptedCASArray['1338-43-8'] = ['1338-43-8', '215-665-4', 'Sorbitan oleate'];
Global_ExemptedCASArray['7439-90-9'] = ['7439-90-9', '231-098-5', 'Krypton'];   // <-- New: Reg. (EC) 987/2008, October 2008
Global_ExemptedCASArray['7440-01-9'] = ['7440-01-9', '231-110-9', 'Neon'];   // <-- New: Reg. (EC) 987/2008, October 2008 
//Global_ExemptedCASArray['1592-23-0'] = ['1592-23-0', '216-472-8', 'Calcium distearate, pure'];
Global_ExemptedCASArray['7440-37-1'] = ['7440-37-1', '231-147-0', 'Argon'];
Global_ExemptedCASArray['7440-59-7'] = ['7440-59-7', '231-168-5', 'Helium'];   // <-- New: Reg. (EC) 987/2008, October 2008
Global_ExemptedCASArray['7440-63-3'] = ['7440-63-3', '231-172-7', 'Xenon'];   // <-- New: Reg. (EC) 987/2008, October 2008
////////Global_ExemptedCASArray['7440-44-0'] = ['7440-44-0', '231-153-3', 'Carbon'];
Global_ExemptedCASArray['7727-37-9'] = ['7727-37-9', '231-783-9', 'Nitrogen'];
Global_ExemptedCASArray['7732-18-5'] = ['7732-18-5', '231-791-2', 'Water, distilled, conductivity or of similar purity H2O'];
////////Global_ExemptedCASArray['7782-42-5'] = ['7782-42-5', '231-955-3', 'Graphite'];
//Global_ExemptedCASArray['8001-21-6'] = ['8001-21-6', '232-273-9', 'Sunflower oil'];
//Global_ExemptedCASArray['8001-22-7'] = ['8001-22-7', '232-274-4', 'Soybean oil'];
//Global_ExemptedCASArray['8001-23-8'] = ['8001-23-8', '232-276-5', 'Safflower oil'];
//Global_ExemptedCASArray['8001-26-1'] = ['8001-26-1', '232-278-6', 'Linseed oil'];
//Global_ExemptedCASArray['8001-30-7'] = ['8001-30-7', '232-281-2', 'Corn oil'];
//Global_ExemptedCASArray['8001-79-4'] = ['8001-79-4', '232-293-8', 'Castor Oil'];
//Global_ExemptedCASArray['8002-13-9'] = ['8002-13-9', '232-299-0', 'Rape oil'];
Global_ExemptedCASArray['8002-43-5'] = ['8002-43-5', '232-307-2', 'Lecithins'];
Global_ExemptedCASArray['8029-43-4'] = ['8029-43-4', '232-436-4', 'Syrups, hydrolyzed starch']; 
Global_ExemptedCASArray['8030-12-4'] = ['8030-12-4', '232-442-7', 'Tallow, hydrogenated'];
Global_ExemptedCASArray['9004-53-9'] = ['9004-53-9', '232-675-4', 'Dextrin'];
Global_ExemptedCASArray['9005-25-8'] = ['9005-25-8', '232-679-6', 'Starch']; 
Global_ExemptedCASArray['9050-36-6'] = ['9050-36-6', '232-940-4', 'Maltodextrin'];
////////Global_ExemptedCASArray['11103-57-4'] = ['11103-57-4', '234-328-2', 'Vitamin A'];
Global_ExemptedCASArray['14906-97-9'] = ['14906-97-9', '238-976-7', 'Sodium D-gluconate'];
Global_ExemptedCASArray['26836-47-5'] = ['26836-47-5', '248-027-9', 'D-glucitol monostearate'];
Global_ExemptedCASArray['61788-59-8'] = ['61788-59-8', '262-988-1', 'Fatty acids, coco, Me esters'];
//Global_ExemptedCASArray['61788-61-2'] = ['61788-61-2', '262-989-7', 'Fatty acids, tallow, Me esters'];
//Global_ExemptedCASArray['61789-44-4'] = ['61789-44-4', '263-060-9', 'Fatty acids, castor-oil'];
//Global_ExemptedCASArray['61790-37-2'] = ['61790-37-2', '263-129-3', 'Fatty acids, tallow'];
Global_ExemptedCASArray['65996-61-4'] = ['65996-61-4', '265-995-8', 'Cellulose Pulp'];
//Global_ExemptedCASArray['67701-01-3'] = ['67701-01-3', '266-925-9', 'Fatty acids, C12-C18 alkyl carboxylic acid'];
//Global_ExemptedCASArray['67701-03-5'] = ['67701-03-5', '266-928-5', 'Fatty acids, C16-C18 alkyl carboxylic acid']; 
//Global_ExemptedCASArray['67701-05-7'] = ['67701-05-7', '266-929-0', 'Fatty acids, C8-C18 and C18 unsaturated alkyl carboxylic acid'];
//Global_ExemptedCASArray['67701-06-8'] = ['67701-06-8', '266-930-6', 'Fatty acids, C14-C18 and C16-C18 unsaturated alkyl carboxylic acid'];
//Global_ExemptedCASArray['67701-08-0'] = ['67701-08-0', '266-932-7', 'Fatty acids, C16-C18 and C18 unsaturated alkyl carboxylic acid'];
Global_ExemptedCASArray['67701-30-8'] = ['67701-30-8', '266-948-4', 'Glycerides, C16-C18 and C18 unsaturated trialkyl glyceride'];
//Global_ExemptedCASArray['67762-26-9'] = ['67762-26-9', '267-007-0', 'Fatty acids, C14-C18 and C16-C18 unsaturated alkyl carboxylic acid methyl ester'];
//Global_ExemptedCASArray['67762-36-1'] = ['67762-36-1', '267-013-3', 'Fatty acids, C6-C12 alkyl carboxylic acid']; 
//Global_ExemptedCASArray['68002-85-7'] = ['68002-85-7', '268-099-5', 'Fatty acids, C14-C22 and C16-C22 unsaturated alkyl carboxylic acid'];
Global_ExemptedCASArray['68131-37-3'] = ['68131-37-3', '268-616-4', 'Syrups, corn, dehydrated'];
//Global_ExemptedCASArray['68308-53-2'] = ['68308-53-2', '269-657-0', 'Fatty acids, soya'];
Global_ExemptedCASArray['68308-54-3'] = ['68308-54-3', '269-658-6', 'Glycerides, tallow mono-, di- and tri-, hydrogenated'];
Global_ExemptedCASArray['68424-37-3'] = ['68424-37-3', '270-298-7', 'Fatty acids, C14-22'];
//Global_ExemptedCASArray['68424-45-3'] = ['68424-45-3', '270-304-8', 'Fatty acids, linseed-oil'];
Global_ExemptedCASArray['68424-61-3'] = ['68424-61-3', '270-312-1', 'Glycerides, C16-C18 and C18 unsaturated alkyl and C16-C18 and C18 unsaturated dialkyl glyceride'];
Global_ExemptedCASArray['85665-33-4'] = ['85665-33-4', '288-123-8', 'Glycerides, C10-18'];
//Global_ExemptedCASArray['90990-10-6'] = ['90990-10-6', '292-771-7', 'Fatty acids, C12-14'];
//Global_ExemptedCASArray['90990-15-1'] = ['90990-15-1', '292-776-4', 'Fatty acids, C12-18 and C18-unsaturated'];
//Global_ExemptedCASArray['93165-31-2'] = ['93165-31-2', '296-916-5', 'Fatty acids, rape-oil, erucic acid-low'];

PopulateEINECSArrayFromCASArray(Global_ExemptedCASArray, Global_ExemptedEINECSArray);



Global_AnnexVCASArray['57-10-3'] = ['57-10-3', '200-312-9', 'Palmitic acid, pure'];
Global_AnnexVCASArray['57-11-4'] = ['57-11-4', '200-313-4', 'Stearic acid, pure'];
Global_AnnexVCASArray['112-80-1'] = ['112-80-1', '204-007-1', 'Oleic acid, pure'];
Global_AnnexVCASArray['143-07-7'] = ['143-07-7', '205-582-1', 'Lauric acid, pure'];
Global_AnnexVCASArray['143-18-0'] = ['143-18-0', '205-590-5', 'Potassium oleate'];
Global_AnnexVCASArray['822-16-2'] = ['822-16-2', '212-490-5', 'Sodium stearate, pure'];
Global_AnnexVCASArray['1317-65-3'] = ['1317-65-3', '215-279-6', 'Limestone'];
Global_AnnexVCASArray['1592-23-0'] = ['1592-23-0', '216-472-8', 'Calcium distearate, pure'];
Global_AnnexVCASArray['8001-21-6'] = ['8001-21-6', '232-273-9', 'Sunflower oil'];
Global_AnnexVCASArray['8001-22-7'] = ['8001-22-7', '232-274-4', 'Soybean oil'];
Global_AnnexVCASArray['8001-23-8'] = ['8001-23-8', '232-276-5', 'Safflower oil'];
Global_AnnexVCASArray['8001-26-1'] = ['8001-26-1', '232-278-6', 'Linseed oil'];
Global_AnnexVCASArray['8001-30-7'] = ['8001-30-7', '232-281-2', 'Corn oil'];
Global_AnnexVCASArray['8001-79-4'] = ['8001-79-4', '232-293-8', 'Castor Oil'];
Global_AnnexVCASArray['8002-13-9'] = ['8002-13-9', '232-299-0', 'Rape oil'];
Global_AnnexVCASArray['61788-61-2'] = ['61788-61-2', '262-989-7', 'Fatty acids, tallow, Me esters'];
Global_AnnexVCASArray['61789-44-4'] = ['61789-44-4', '263-060-9', 'Fatty acids, castor-oil'];
Global_AnnexVCASArray['61790-37-2'] = ['61790-37-2', '263-129-3', 'Fatty acids, tallow'];
Global_AnnexVCASArray['67701-01-3'] = ['67701-01-3', '266-925-9', 'Fatty acids, C12-C18 alkyl carboxylic acid'];
Global_AnnexVCASArray['67701-03-5'] = ['67701-03-5', '266-928-5', 'Fatty acids, C16-C18 alkyl carboxylic acid']; 
Global_AnnexVCASArray['67701-05-7'] = ['67701-05-7', '266-929-0', 'Fatty acids, C8-C18 and C18 unsaturated alkyl carboxylic acid'];
Global_AnnexVCASArray['67701-06-8'] = ['67701-06-8', '266-930-6', 'Fatty acids, C14-C18 and C16-C18 unsaturated alkyl carboxylic acid'];
Global_AnnexVCASArray['67701-08-0'] = ['67701-08-0', '266-932-7', 'Fatty acids, C16-C18 and C18 unsaturated alkyl carboxylic acid'];
Global_AnnexVCASArray['67762-26-9'] = ['67762-26-9', '267-007-0', 'Fatty acids, C14-C18 and C16-C18 unsaturated alkyl carboxylic acid methyl ester'];
Global_AnnexVCASArray['67762-36-1'] = ['67762-36-1', '267-013-3', 'Fatty acids, C6-C12 alkyl carboxylic acid']; 
Global_AnnexVCASArray['68002-85-7'] = ['68002-85-7', '268-099-5', 'Fatty acids, C14-C22 and C16-C22 unsaturated alkyl carboxylic acid'];
Global_AnnexVCASArray['68308-53-2'] = ['68308-53-2', '269-657-0', 'Fatty acids, soya'];
Global_AnnexVCASArray['68424-37-3'] = ['68424-37-3', '270-298-7', 'Fatty acids, C14-22'];
Global_AnnexVCASArray['68424-45-3'] = ['68424-45-3', '270-304-8', 'Fatty acids, linseed-oil'];
Global_AnnexVCASArray['90990-10-6'] = ['90990-10-6', '292-771-7', 'Fatty acids, C12-14'];
Global_AnnexVCASArray['90990-15-1'] = ['90990-15-1', '292-776-4', 'Fatty acids, C12-18 and C18-unsaturated'];
Global_AnnexVCASArray['93165-31-2'] = ['93165-31-2', '296-916-5', 'Fatty acids, rape-oil, erucic acid-low'];

Global_AnnexVCASArray['1333-74-0'] = ['1333-74-0', '215-605-7', 'Hydrogen'];
Global_AnnexVCASArray['7782-44-7'] = ['7782-44-7', '231-956-9', 'Oxygen'];

Global_AnnexVCASArray['56-81-5'] = ['56-81-5', '200-289-5', 'Glycerol'];

PopulateECArrayFromCASArray(Global_AnnexVCASArray, Global_AnnexVECArray);




////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////


Global_ESIS_EC_Database['500-313-7'] = ['', '500-313-7', '4,4\'-Methylenediphenyl diisocyanate, oligomeric reaction products with butane-1,3-diol, 2,4\'-diisocyanatodiphenylmethane, 1,1\'-methylenebis(4-isocyanatobenzene) homopolymer, [(methylethylene)bis(oxy)]dipropanol and propane-1,2-diol'];
Global_ESIS_EC_Database['500-774-4'] = ['', '500-774-4', '1,3-Diaminotoluene, propoxylated'];
Global_ESIS_EC_Database['500-776-5'] = ['', '500-776-5', 'C18 poly-unsaturated fatty acid triglyceride'];





function Get_Classification_C1_CASArray() {return Global_Classification_C1_CASArray;}
function Get_Classification_C1_EINECSArray() {return Global_Classification_C1_EINECSArray;}

function Get_Classification_C2_CASArray() {return Global_Classification_C2_CASArray;}
function Get_Classification_C2_EINECSArray() {return Global_Classification_C2_EINECSArray;}

function Get_Classification_M1_CASArray() {return Global_Classification_M1_CASArray;}
function Get_Classification_M1_EINECSArray() {return Global_Classification_M1_EINECSArray;}

function Get_Classification_M2_CASArray() {return Global_Classification_M2_CASArray;}
function Get_Classification_M2_EINECSArray() {return Global_Classification_M2_EINECSArray;}

function Get_Classification_R1_CASArray() {return Global_Classification_R1_CASArray;}
function Get_Classification_R1_EINECSArray() {return Global_Classification_R1_EINECSArray;}

function Get_Classification_R2_CASArray() {return Global_Classification_R2_CASArray;}
function Get_Classification_R2_EINECSArray() {return Global_Classification_R2_EINECSArray;}

function Get_Classification_R_50_53_CASArray() {return Global_Classification_R_50_53_CASArray;}
function Get_Classification_R_50_53_EINECSArray() {return Global_Classification_R_50_53_EINECSArray;}




function Is_Class_C1_CAS(ID)
{
	var ClassificationArray = Get_Classification_C1_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_C1_EINECS(ID)
{
	var ClassificationArray = Get_Classification_C1_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_C1(ID)
{
	return (( Is_Class_C1_CAS(ID) || Is_Class_C1_EINECS(ID) ));
}



function Is_Class_C2_CAS(ID)
{
	var ClassificationArray = Get_Classification_C2_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_C2_EINECS(ID)
{
	var ClassificationArray = Get_Classification_C2_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_C2(ID)
{
	return (( Is_Class_C2_CAS(ID) || Is_Class_C2_EINECS(ID) ));
}


function Is_Class_M1_CAS(ID)
{
	var ClassificationArray = Get_Classification_M1_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_M1_EINECS(ID)
{
	var ClassificationArray = Get_Classification_M1_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_M1(ID)
{
	return (( Is_Class_M1_CAS(ID) || Is_Class_M1_EINECS(ID) ));
}


function Is_Class_M2_CAS(ID)
{
	var ClassificationArray = Get_Classification_M2_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_M2_EINECS(ID)
{
	var ClassificationArray = Get_Classification_M2_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_M2(ID)
{
	return (( Is_Class_M2_CAS(ID) || Is_Class_M2_EINECS(ID) ));
}


function Is_Class_R1_CAS(ID)
{
	var ClassificationArray = Get_Classification_R1_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_R1_EINECS(ID)
{
	var ClassificationArray = Get_Classification_R1_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_R1(ID)
{
	return (( Is_Class_R1_CAS(ID) || Is_Class_R1_EINECS(ID) ));
}


function Is_Class_R2_CAS(ID)
{
	var ClassificationArray = Get_Classification_R2_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_R2_EINECS(ID)
{
	var ClassificationArray = Get_Classification_R2_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_R2(ID)
{
	return (( Is_Class_R2_CAS(ID) || Is_Class_R2_EINECS(ID) ));
}


function Is_Class_R_50_53_CAS(ID)
{
	var ClassificationArray = Get_Classification_R_50_53_CASArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}


function Is_Class_R_50_53_EINECS(ID)
{
	var ClassificationArray = Get_Classification_R_50_53_EINECSArray();
	if (ClassificationArray)
	{
		return ClassificationArray[ID];
	}
	else
	{
		return null;
	}
}

function Is_Class_R_50_53(ID)
{
	return (( Is_Class_R_50_53_CAS(ID) || Is_Class_R_50_53_EINECS(ID) ));
}

function Is_Class_CMR(ID)
{
	return (
			 Is_Class_C1(ID) || 
			 Is_Class_C2(ID) || 
			 Is_Class_M1(ID) || 
			 Is_Class_M2(ID) || 
			 Is_Class_R1(ID) || 
			 Is_Class_R2(ID)  
			);
}


Global_Classification_C1_CASArray = new Array();
Global_Classification_C1_EINECSArray = new Array();
Global_Classification_C2_CASArray = new Array();
Global_Classification_C2_EINECSArray = new Array();

Global_Classification_M1_CASArray = new Array();
Global_Classification_M1_EINECSArray = new Array();
Global_Classification_M2_CASArray = new Array();
Global_Classification_M2_EINECSArray = new Array();

Global_Classification_R1_CASArray = new Array();
Global_Classification_R1_EINECSArray = new Array();
Global_Classification_R2_CASArray = new Array();
Global_Classification_R2_EINECSArray = new Array();

Global_Classification_R_50_53_CASArray = new Array();
Global_Classification_R_50_53_EINECSArray = new Array();





function Populate_PBT_EINECSArrayFromCASArray(CASArray, EINECSArray)
{
	for (var CAS in CASArray)
  	{		
		if (CASArray[CAS][1] != "")
		{
			EINECSArray[CASArray[CAS][1]] =  CASArray[CAS];	
		}
		//alert ("CAS: " + CAS);
		//alert("CASArray[CAS][1]: " +CASArray[CAS][1] + "   EINECSArray[CASArray[CAS][1]]:"+ EINECSArray[CASArray[CAS][1]]);
  	}
	//ShowEINECSArray(EINECSArray)
}

function LookUpCASPBT(EC_Number)
{
	var CASArray = Get_Global_PBT_CASArray();
	if (CASArray)
	{
		return CASArray[EC_Number];
	}
	else
	{
		return null;
	}
}



function LookUpEINECSPBT(EC_Number)
{
	var EINECSArray = Get_Global_PBT_EINECSArray();
	if (EINECSArray)
	{
		return EINECSArray[EC_Number];
	}
	else
	{
		return null;
	}
}


function LookUpECPBT(EC_Number)
{
	return (( LookUpCASPBT(EC_Number) || LookUpEINECSPBT(EC_Number) ));
}

function Get_Global_PBT_CASArray() {return Global_PBT_CASArray;}
function Get_Global_PBT_EINECSArray() {return Global_PBT_EINECSArray;}

var Global_PBT_CASArray = new Array();
var Global_PBT_EINECSArray = new Array();

//Global_PBT_CASArray['120-82-1'] = ['120-82-1', '204-428-0', 'PBT'];
//Global_PBT_CASArray['87-61-6'] = ['87-61-6', '201-757-1', 'PBT'];


//Populate_PBT_EINECSArrayFromCASArray(Global_PBT_CASArray, Global_PBT_EINECSArray);
//Populate_PBT_EINECSArrayFromCASArray(Get_Global_PBT_CASArray(), Get_Global_PBT_EINECSArray());



//ShowEINECSArray(Global_ExemptedEINECSArray);




////Global_ESIS_CAS_Database['50-00-0'] = ['50-00-0', '200-001-8', 'Formaldehyde'];
////Global_ESIS_CAS_Database['50-01-1'] = ['50-01-1', '200-002-3', 'Guanidinium chloride'];
////Global_ESIS_CAS_Database['50-02-2'] = ['50-02-2', '200-003-9', 'Dexamethasone'];
////Global_ESIS_CAS_Database['50-03-3'] = ['50-03-3', '200-004-4', 'Hydrocortisone 21-acetate'];
////Global_ESIS_CAS_Database['50-04-4'] = ['50-04-4', '200-006-5', 'Cortisone 21-acetate'];
////Global_ESIS_CAS_Database['50-06-6'] = ['50-06-6', '200-007-0', 'Phenobarbital'];
////Global_ESIS_CAS_Database['50-07-7'] = ['50-07-7', '200-008-6', 'Mitomycin'];
////Global_ESIS_CAS_Database['50-09-9'] = ['50-09-9', '200-009-1', 'Hexobarbital sodium'];
////Global_ESIS_CAS_Database['50-10-2'] = ['50-10-2', '200-010-7', 'Oxyphenonium bromide'];
////Global_ESIS_CAS_Database['50-11-3'] = ['50-11-3', '200-011-2', 'Metharbital'];


////PopulateEINECSArrayFromCASArray(Get_ESIS_CAS_Database(), Get_ESIS_EC_Database());

//ShowEINECSArray(Get_ESIS_EC_Database());



// selftest array
//SelfTestCASArray(Global_ExemptedCASArray);
//SelfTestEINECSArray(Global_ExemptedEINECSArray);
//ShowEINECSArray(Global_ExemptedEINECSArray);

// Global_ExemptedEINECSArray['200-061-5'] = ['50-70-4', '200-061-5', 'D-glucitol']; 
// Global_ExemptedEINECSArray['200-066-2'] = ['50-81-7', '200-066-2', 'Ascorbic acid']; 
// Global_ExemptedEINECSArray['200-075-1'] = ['50-99-7', '200-075-1', 'Glucose'];
// Global_ExemptedEINECSArray['200-294-2'] = ['56-87-1', '200-294-2', 'L-lysine']; 



//alert (GetTimeStamp());

Global_ESIS_ELINCS_EINECS_Database['406-950-6'] = ['3236-71-3', '406-950-6', '9,9-bis(4-hydroxyphenyl)fluorene'];


PopulateCASArrayFromEINECSArray(Get_ESIS_ELINCS_EINECS_Database(), Get_ESIS_CAS_Database());
PopulateEINECSArrayFromEINECSArray(Get_ESIS_ELINCS_EINECS_Database(), Get_ESIS_EC_Database());



function ReportErrorInEmailAddress(Email, ErrorNature)
{
	Message = GetMessage("Error_In_Email_Header") + " " + Email + "\n" + ErrorNature ;
	alert(Message);
}


<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- V1.1.3: Sandeep V. Tamhankar (stamhankar@hotmail.com) -->
<!-- Original:  Sandeep V. Tamhankar (stamhankar@hotmail.com) -->
<!-- Changes:
/* 1.1.4: Fixed a bug where upper ASCII characters (i.e. accented letters
international characters) were allowed.

1.1.3: Added the restriction to only accept addresses ending in two
letters (interpreted to be a country code) or one of the known
TLDs (com, net, org, edu, int, mil, gov, arpa), including the
new ones (biz, aero, name, coop, info, pro, museum).  One can
easily update the list (if ICANN adds even more TLDs in the
future) by updating the knownDomsPat variable near the
top of the function.  Also, I added a variable at the top
of the function that determines whether or not TLDs should be
checked at all.  This is good if you are using this function
internally (i.e. intranet site) where hostnames don't have to 
conform to W3C standards and thus internal organization e-mail
addresses don't have to either.
Changed some of the logic so that the function will work properly
with Netscape 6.

1.1.2: Fixed a bug where trailing . in e-mail address was passing
(the bug is actually in the weak regexp engine of the browser; I
simplified the regexps to make it work).

1.1.1: Removed restriction that countries must be preceded by a domain,
so abc@host.uk is now legal.  However, there's still the 
restriction that an address must end in a two or three letter
word.

1.1: Rewrote most of the function to conform more closely to RFC 822.

1.0: Original  */
// -->

<!-- Begin
function Quick_CheckThisEmail (emailStr) {

/* The following variable tells the rest of the function whether or not
to verify that the address ends in a two-letter country or well-known
TLD.  1 means check it, 0 means don't. */

var checkTLD=1;

/* The following is the list of known TLDs that an e-mail address must end with. */

var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|asia|mob|mobi|eu)$/;

/* The following pattern is used to check if the entered e-mail address
fits the user@domain format.  It also is used to separate the username
from the domain. */

var emailPat=/^(.+)@(.+)$/;

/* The following string represents the pattern for matching all special
characters.  We don't want to allow special characters in the address. 
These characters include ( ) < > @ , ; : \ " . [ ] */

var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

/* The following string represents the range of characters allowed in a 
username or domainname.  It really states which chars aren't allowed.*/

var validChars="\[^\\s" + specialChars + "\]";

/* The following pattern applies if the "user" is a quoted string (in
which case, there are no rules about which characters are allowed
and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
is a legal e-mail address. */

var quotedUser="(\"[^\"]*\")";

/* The following pattern applies for domains that are IP addresses,
rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
e-mail address. NOTE: The square brackets are required. */

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

/* The following string represents an atom (basically a series of non-special characters.) */

var atom=validChars + '+';

/* The following string represents one word in the typical username.
For example, in john.doe@somewhere.com, john and doe are words.
Basically, a word is either an atom or quoted string. */

var word="(" + atom + "|" + quotedUser + ")";

// The following pattern describes the structure of the user

var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

/* The following pattern describes the structure of a normal symbolic
domain, as opposed to ipDomainPat, shown above. */

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

/* Finally, let's start trying to figure out if the supplied address is valid. */

/* Begin with the coarse pattern to simply break up user@domain into
different pieces that are easy to analyze. */

var matchArray=emailStr.match(emailPat);

if (matchArray==null) {

/* Too many/few @'s or something; basically, this address doesn't
even fit the general mould of a valid e-mail address. */

//alert("Email address seems incorrect (check @ and .'s)");
ReportErrorInEmailAddress(emailStr, GetMessage("Check_At_and_Dot"));
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

// Start by checking that only basic ASCII characters are in the strings (0-127).

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
//alert("Ths username contains invalid characters.");
ReportErrorInEmailAddress(emailStr, GetMessage("Invalid_username"));
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
//alert("Ths domain name contains invalid characters.");
ReportErrorInEmailAddress(emailStr, GetMessage("Invalid_Domaine"));
return false;
   }
}

// See if "user" is valid 

if (user.match(userPat)==null) {

// user is not valid

//alert("The username doesn't seem to be valid.");
ReportErrorInEmailAddress(emailStr, GetMessage("Invalid_username_2"));
return false;
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
host name) make sure the IP address is valid. */

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

// this is an IP address

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
//alert("Destination IP address is invalid!");
ReportErrorInEmailAddress(emailStr, GetMessage("Invalid_IP"));
return false;
   }
}
return true;
}

// Domain is symbolic name.  Check if it's valid.
 
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
//alert("The domain name does not seem to be valid.");
ReportErrorInEmailAddress(emailStr, GetMessage("Invalid_Domaine_2"));
return false;
   }
}

/* domain name seems valid, but now make sure that it ends in a
known top-level domain (like com, edu, gov) or a two-letter word,
representing country (uk, nl), and that there's a hostname preceding 
the domain or country. */

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
//alert("The address must end in a well-known domain or two letter " + "country.");
ReportErrorInEmailAddress(emailStr, GetMessage("Invalid_End_Address"));
return false;
}

// Make sure there's a host name preceding the domain.

if (len<2) {
//alert("This address is missing a hostname!");
ReportErrorInEmailAddress(emailStr, GetMessage("Missing_Hostname"));
return false;
}

// If we've gotten this far, everything's valid!
return true;
}


function Quick_CheckThisEmailNode(Node, EmailString) 
{
    if (Quick_CheckThisEmail(EmailString) == false) 
	{
    	Node.focus();
		Node.style.background="red";
    	return false;
  	}
  	return true;
}
//  End -->


function OpenBLandsLink() 
{
  //NewWindow_2(GetMessage("B-Lands_Link"),800,750);
  QueryWindow(GetMessage("B-Lands_Link"),800,750,"InfoWindow");
}

function OpenContactLink() 
{
  ///NewWindow_2(GetMessage("Contact_Link"),800,750);
  QueryWindow(GetMessage("Contact_Link"),800,750,"InfoWindow");
}

function OpenHelpLink() 
{
  QueryWindow(GetMessage("Help_Link"),800,750,"InfoWindow");
}

