function empty (dropDown,fillupto) 
{ 
	for (k=fillupto; fillupto<dropDown.length; k++) 
		dropDown.options[fillupto]=null; 
} 

function fillup(origin, destination,Menu,textEmpty,txtFull) 
{	ref = origin.options[origin.selectedIndex].value;  
	Vfillup(ref, destination,Menu,textEmpty,txtFull) 
}

function Vfillup(value, destination,Menu,textEmpty,txtFull) 
{	j=0; 
	if (value=="-") 
	{ 
   		destination.options[j++]=new Option(textEmpty,"-"); 
	} 
	else 
	{ destination.options[j++]= new Option(txtFull,"-"); 
   		for (i=0;i<Menu.length;i++) 
   		{	Temp = Menu[i]; 
   			if (value == Temp[2]) 
   			{ 
   				destination.options[j++]= new Option(Menu[i][1],Menu[i][0]); 
   			} 
   		} 
	} 
	empty(destination,j); 
} 

var decimalPointDelimiter = ".";
var defaultEmptyOK = false ;
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
function isFloat (s)
{   var i;
    var seenDecimalPoint = false;
    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);
    if (s == decimalPointDelimiter) return false;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }
    return true;
}
function validateTo(fromBox,toBox,Mgeneral,Mnegatif,Mlower) {
 var testval=parseFloat(toBox.value);
 if (!isFloat(toBox.value) && toBox.value!="") {
  alert(Mgeneral);
  toBox.value="";
 } else if (toBox.value=="") {
  ;
 } else if (testval<0) {
  alert(Mnegatif);
  toBox.value="";
 } else if (parseFloat(fromBox.value)>testval && fromBox.value!="") {
  alert(Mlower);
  toBox.value="";
 } else {
  toBox.value=testval;
 }
}
function validateFrom(fromBox,toBox,Mgeneral,Mnegatif,Mlower) {
 var testval=parseFloat(fromBox.value);
 if (!isFloat(fromBox.value) && fromBox.value!="") {
  alert(Mgeneral);
  fromBox.value="";
 } else if (fromBox.value=="") {
  ;
 } else if (testval<0) {
  alert(Mnegatif);
  fromBox.value="";
 } else if (parseFloat(toBox.value)<testval && toBox.value!="") {
  alert(Mlower);
  fromBox.value="";
 } else {
  fromBox.value=testval;
 }
}


function removeBoxTags(theBox) {
	sValue = theBox.value;
	iBegin = -1;
	for (i=0; i<sValue.length; i++) {
		if (sValue.charAt(i)=="<") {
			iBegin=i;
		}
		if (sValue.charAt(i)==">" && iBegin!=-1 && iBegin!=i-1) {
			if (iBegin>0) {
				sBeginValue = sValue.substring(0,iBegin);
			} else {
				sBeginValue = "";
			}
			if (i<sValue.length-1) {
				sEndValue = sValue.substring(i+1,sValue.length);
			} else {
				sEndValue = "";
			}
			sValue = sBeginValue + sEndValue;
			i = -1;
			iBegin = -1;
		}
	}
	theBox.value = sValue;
}

/*
This function checks the value for the specified box displaying one of the 2 error messages Msg1 or
Msg2 in case of a not admitted value for the given box .
It works using a deterministic automata , regular language .
las = the last state
n = states for numeric inputs
d = states for decimal inputs
*/
function checkMeasuresInt(box,Msg1,Msg2) {
var str = box.value; 
var str2 = ""; 
var state = "n11";
var chfig = "0123456789";
var chdec = ".";
var chmor = "+";
var chbet = "-";
var chsep = ";";
var chdiv = "/";
var chall = "0123456789;-+. "+chdiv;
for (var i = 0; (i < str.length && state != "err1"); i++) {
	var ch = str.substring(i, i + 1);
	if (chall.indexOf(ch,0) == -1) { 
		// character not allowed
		state="err2";
		break;
	};
	if (ch != " "){
		switch (state) {
			case "n11" :
				if (chfig.indexOf (ch,0) != -1) { state="n12"; break };
				if (chdec.indexOf (ch,0) != -1) { state="d11"; break };
				state="err1";
				break;
			case "n12" :
				if (chfig.indexOf (ch,0) != -1) { state="n12"; break };
				if (chdec.indexOf (ch,0) != -1) { state="d11"; break };
				if (chsep.indexOf (ch,0) != -1) { state="n21"; break };
				if (chbet.indexOf (ch,0) != -1) { state="n31"; break };
				if (chmor.indexOf (ch,0) != -1) { state="las"; break };
				if (chdiv.indexOf (ch,0) != -1) { state="C1"; break };// added for 1/4 case
				state="err1";
				break;
			case "d11" :
				if (chfig.indexOf (ch,0) != -1) { state="d12"; break };
				state="err1";
				break;
			case "d12" :
				if (chfig.indexOf (ch,0) != -1) { state="d12"; break };
				if (chsep.indexOf (ch,0) != -1) { state="n21"; break };
				if (chbet.indexOf (ch,0) != -1) { state="n31"; break };
				if (chmor.indexOf (ch,0) != -1) { state="las"; break };
				state="err1";
				break;
			case "n21" :
				if (chfig.indexOf (ch,0) != -1) { state="n22"; break };
				if (chdec.indexOf (ch,0) != -1) { state="d21"; break };
				state="err1";
				break;
			case "n22" :
				if (chfig.indexOf (ch,0) != -1) { state="n22"; break };
				if (chdec.indexOf (ch,0) != -1) { state="d21"; break };
				if (chsep.indexOf (ch,0) != -1) { state="n21"; break };
				if (chdiv.indexOf (ch,0) != -1) { state="A1"; break };// added for 1/4 case
				state="err1";
				break;
			case "d21" :
				if (chfig.indexOf (ch,0) != -1) { state="d22"; break };
				state="err1";
				break;
			case "d22" :
				if (chfig.indexOf (ch,0) != -1) { state="d22"; break };
				if (chsep.indexOf (ch,0) != -1) { state="n21"; break };
				state="err1";
				break;
			case "n31" :
				if (chfig.indexOf (ch,0) != -1) { state="n32"; break };
				if (chdec.indexOf (ch,0) != -1) { state="d31"; break };
				state="err1";
				break;
			case "n32" :
				if (chfig.indexOf (ch,0) != -1) { state="n32"; break };
				if (chdec.indexOf (ch,0) != -1) { state="d31"; break };
				if (chdiv.indexOf (ch,0) != -1) { state="B1"; break };// added for 1/4 case
				state="err1";
				break;
			case "d31" :
				if (chfig.indexOf (ch,0) != -1) { state="d32"; break };
				state="err1";
				break;
			case "d32" :
				if (chfig.indexOf (ch,0) != -1) { state="d32"; break };
				state="err1";
				break;
			case "las" :
				state="err1";
				break;
			case "A1":// added for 1/4 case
				if (chfig.indexOf (ch,0) != -1) { state="A2"; break };
				state="err1";
				break;
			case "A2":// added for 1/4 case
				if (chfig.indexOf (ch,0) != -1) { state="A2"; break };
				if (chsep.indexOf (ch,0) != -1) { state="n21"; break };
				state="err1";
				break;				
			case "B1":// added for 1/4 case
				if (chfig.indexOf (ch,0) != -1) { state="B2"; break };
				state="err1";
				break;
			case "B2":// added for 1/4 case
				if (chfig.indexOf (ch,0) != -1) { state="B2"; break };
				state="err1";
				break;
			case "C1":// added for 1/4 case
				if (chfig.indexOf (ch,0) != -1) { state="C2"; break };
				state="err1";
				break;
			case "C2":// added for 1/4 case
				if (chfig.indexOf (ch,0) != -1) { state="C2"; break };
				if (chsep.indexOf (ch,0) != -1) { state="n21"; break };
				if (chbet.indexOf (ch,0) != -1) { state="n31"; break };		
				if (chmor.indexOf (ch,0) != -1) { state="las"; break };						
				state="err1";
				break;				
			default :
				state="err1";
		}
		if (state != "err1") {
			str2 = str2 + ch ;
		}
	}; // end if blank
}
 // end loop
if ( (state == "d11") || ((state == "n21") && (ch != ";")) || (state == "d21") || (state == "n31")|| (state == "d31")) { state = "err1" }
box.value = str2;

// error Msg1 ?
if ( state == "err1")
{ alert("\n"+Msg1);
}

// error Msg2 ?
if ( state == "err2")
{ alert("\n"+Msg2);
}

}
/*end function checkMeasure */