
 var AND_SEPARATOR = "AND";
 var OR_SEPARATOR = "OR";
 var NOT_SEPARATOR = "NOT";
 var OR_NOT_SEPARATOR = "OR NOT";
 var AND_NOT_SEPARATOR = "AND NOT";
 
 var wildCard = '*';
 
 var input_array = new Array();
 var cur_index = 0;
 var substr = "";
 var wrdSeparator = '~';
 var atomSeparator = ' ';
 
 
 var equivalenceTable = new Array(30);
equivalenceTable[0] = "CY"; 
equivalenceTable[1] = "AU";
equivalenceTable[2] = "TW";
equivalenceTable[3] = "AA";
equivalenceTable[4] = "DS";
equivalenceTable[5] = "DR";
equivalenceTable[6] = "DD";
equivalenceTable[7] = "DT";
equivalenceTable[8] = "PD";
equivalenceTable[9] = "OJ";
equivalenceTable[10] = "HD";
equivalenceTable[11] = "OL";
equivalenceTable[12] = "RN";
equivalenceTable[13] = "ND";
equivalenceTable[14] = "TD";
equivalenceTable[15] = "NC";
equivalenceTable[16] = "PR";
equivalenceTable[17] = "RP";
equivalenceTable[18] = "TY";
equivalenceTable[19] = "AC";
equivalenceTable[20] = "TI";
equivalenceTable[21] = "CO";
equivalenceTable[22] = "OC";
equivalenceTable[23] = "ON";
equivalenceTable[24] = "PC";
equivalenceTable[25] = "PN";
equivalenceTable[26] = "RC";
equivalenceTable[27] = "RG";
equivalenceTable[28] = "FT";
equivalenceTable[29] = "MA";




 //
 // check is document object is in the page
 //
 function isObjectExist(formName, elementName){
  	if((document.forms[formName].elements[elementName]) != null)
	 return true;
	else
	 return false;   	
 }

 
 function validateDate(formName, elementName){
  return validateData(formName, elementName, 'DATE');
 }
 
 function validateData(formName, elementName, fieldType){
	// if oblect document.forms[formName].elements[elementName] is not in the page --> skip validation 
	if( ! isObjectExist(formName, elementName))
	 return true;
 
    var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());

	search_text  = removeExtaraSpace(search_text); 	
    search_text = replaceBrackets(search_text); 
    
// 
// David modification 02/06
//    	
	if (fieldType != 'DOCNUMBER' && (search_text == "NULL" || search_text == "null")) return true;
//
// End of modification
//
     
	if(!checkLBE(search_text)){
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
	 return false;
	}

	// check first <<
	search_text = trim(search_text);
	if(search_text.indexOf('<<')==0){	
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
	  return false;
	}

	// check last <<
	chk_text = replace(search_text, ' ', '');
	if( search_text.indexOf('<<') >0 && search_text.indexOf('<<')==(chk_text.length-1)){	
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
	  return false;
	}
	
	
	// check XXX >> XXX
	chk_text = replace(search_text, ' ', '');
	if( chk_text.indexOf('>>') > 0 ){
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));		
	  return false;
	}

	// check (OR >>) and (AND >>)	
     search_text = ' ' + search_text;
	 search_text = replace(search_text, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
	 search_text = replace(search_text, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );
	 search_text = replace(search_text, ' '+OR_SEPARATOR+' ', wrdSeparator );
	 search_text = replace(search_text, ' '+AND_SEPARATOR+' ', wrdSeparator );
// NOT is not acceptable here	 
	 search_text = replace(search_text, ' '+NOT_SEPARATOR+' ', wrdSeparator );
	 search_text = replace( search_text, '<<' , wrdSeparator );	 
	 
	 // check double operator
	 if( checkDoubleOperatiors(search_text) ){
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
	  	
  	   return false;
	 }

	 search_text = trim( replaceLBE_forDate(search_text, wrdSeparator) );	 
	 	
	 input_array = new Array();
	 cur_index = 0;
     getWordsArray( search_text  );  	
	 var DateAtom = '';
	 
	for(i=0; i<input_array.length; i++ ){
	 DateAtom = trim(replace(input_array[i], wrdSeparator, ''));
	 if(fieldType =='DATE'){		 	
	  if(!validateDateAtom( DateAtom, formName, elementName) )
    	 return false;
	 }

	 if(fieldType =='DOCNUMBER'){		 	
	  if(!validateDocNumberAtom( DateAtom, formName, elementName) )
    	 return false;
	 }

	 	 
	}	 
	  
	return true;  
	
 }
 
 
 function validateDateAtom(search_text, formName, elementName){
    
	var wrong_input = search_text;
	var maxDataLength = 8;
    var isValidate = true;
		
	 if(search_text.length == 0)
	 return true;
	 
	 if(search_text == 'DDnullDD' || search_text == 'DDNULLDD')
	 return true;
	 
	 if(search_text == 'DTnullDT' || search_text == 'DTNULLDT')
	 return true;

	if( isOSJNumber(search_text) ){
	 if(search_text.length == maxDataLength)
	   return true;
	     
	 if(search_text.indexOf('*') >= 0 && search_text.length == maxDataLength+1 )
	  return true;
	  
	  isValidate = false;
	} else {	
	  isValidate = false;
	}
	
	if(!isValidate){
	  dateErrorAlert(search_text, wrong_input, elementName);
	  return false;
	} else
	  return true;
	
 }

 function validateDocNumberAtom(search_text, formName, elementName){
 
   if(!isDocNumber(trim(search_text))){
   
   	  dateErrorAlert(search_text, search_text, elementName);
     return false;
   }
   
   return true;
 }
 
 
 function  validateDocumentNumber(formName, elementName){
 	return validateData(formName, elementName, 'DOCNUMBER');
	 
 }
 
 function validateCPV(formName, elementName){

	// if oblect document.forms[formName].elements[elementName] is not in the page --> skip validation 
	if( ! isObjectExist(formName, elementName))
	 return true;
 
    var maxCPVlength = 8;
    var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());

	search_text  = removeExtaraSpace(search_text); 
		
    search_text = replaceBrackets(search_text);
		
	 if(search_text.length == 0 )
	 return true;	
	 
	 input_array = new Array();
	 cur_index = 0;
	 var wrong_input = '';	
	 
     var toArray = ' ' +search_text;
	 toArray = replace(toArray, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+OR_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+AND_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+NOT_SEPARATOR+' ', wrdSeparator );
	 	 
     getWordsArray(toArray );  
  
	// check   CPV elements
	for(i=0; i<input_array.length; i++ ){
	     CPVatom =  input_array[i];

		if(!isCPVvalue(CPVatom) && CPVatom!="NULL"){
		 	alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			      "' \n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
				  "\n"+fieldsMessages.Get('error_in_term')+"\n  " + CPVatom +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );
			return false;
		}
	
		CPVatom = replace(CPVatom, '*'  , '' );
		if(CPVatom.length > maxCPVlength && CPVatom!="NULL"){
		 	alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			      "' \n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
				  "\n"+fieldsMessages.Get('error_in_term')+"\n  " + CPVatom +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );
	     return false;	
		}
	
	}	
 
	return true;
 
 }
 
  
  function isCPVvalue(search_text){
  
	var numString = '0123456789*';
	var thisChar;
	var counter = 0;
	
	for(var i=0; i <search_text.length; i++ ){
	   thisChar = search_text.substring(i, i+1);	   
	   if(numString.indexOf(thisChar) != -1)
	    counter++;	   
	}
 
 	if(counter == search_text.length )
	 return true;  
	else 
	 return false;	
 }
 
 
 //
 // validate NUTS field
 //
 function validateNUTS(formName, elementName){
 	// if oblect document.forms[formName].elements[elementName] is not in the page --> skip validation 
	if( ! isObjectExist(formName, elementName))
	 return true;

     var maxNUTSlength = 9;
     var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());

	 search_text  = removeExtaraSpace(search_text); 	 
     search_text = replaceBrackets(search_text);
		 
	 if(search_text.length == 0 )
	 return true;	
	 
	 input_array = new Array();
	 cur_index = 0;
	 var wrong_input = '';	

	  var toArray = ' ' +search_text;
	 toArray = replace(toArray, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );	  
	 toArray = replace(toArray, ' '+OR_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+AND_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+NOT_SEPARATOR+' ', wrdSeparator );
	 	 
     getWordsArray(toArray ); 
	 
  
	// check   NUTS elements
	for(i=0; i<input_array.length; i++ ){
	     NUTSatom =  input_array[i];

		
		
		if(!isNUTSvalue(NUTSatom)){
		 	alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			      "' \n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
				  "\n"+fieldsMessages.Get('error_in_term')+"\n  " + NUTSatom +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );
			return false;
		}
	
		NUTSatom = replace(NUTSatom, '*'  , '' );
		
		if(NUTSatom.length > maxNUTSlength && (NUTSatom!="RCNULLRC" || NUTSatom!="NULL")){
		 	alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			      "' \n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
				  "\n"+fieldsMessages.Get('error_in_term')+"\n  " + NUTSatom +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );
	     return false;	
		}
	
	}	
 
	return true;
 }
 
 
  
  function isNUTSvalue(search_text){
 
	var nutsString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*';
	var thisChar;
	var counter = 0;
	
	for(var i=0; i <search_text.length; i++ ){
	   thisChar = search_text.substring(i, i+1);	   
	   if(nutsString.indexOf(thisChar) != -1)
	    counter++;	   
	}
 
 	if(counter == search_text.length )
	 return true;  
	else 
	 return false;	

 }
 
 
//
// check OJ S
// correct fromat : nnn/yyyy  
// where nnn - number from 0 to 260
//      yyyy - year 1993 - 2010
//
 function validateOJS(formName, elementName){
    
 	// if oblect document.forms[formName].elements[elementName] is not in the page --> skip validation 
	if( ! isObjectExist(formName, elementName))
	 return true;
  
    var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());
	
    search_text = replaceBrackets(search_text);	
	
	var wrong_input = search_text;	       	
		
	 if(search_text.length == 0 )
	 return true;

	if(!checkLBE(search_text)){
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
	 return false;
	}	 
     search_text = ' ' + search_text;
	 search_text = replace(search_text, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
	 search_text = replace(search_text, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );	 
	 search_text = replace(search_text, ' '+OR_SEPARATOR+' ', wrdSeparator );
	 search_text = replace(search_text, ' '+AND_SEPARATOR+' ', wrdSeparator );
	 search_text = replace(search_text, ' '+NOT_SEPARATOR+' ', wrdSeparator );
	 search_text = replace( search_text, '<<' , wrdSeparator );	 
	 search_text = replace( search_text, '>>', wrdSeparator  );	 	
	  
	 // check double operator
	 if( checkDoubleOperatiors(search_text) ){
	 
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
	  
  	   return false;
	 }

	 search_text = trim( replaceLBE(search_text, wrdSeparator) );	 
	 search_text = ' ' + search_text;
	 input_array = new Array();
	 cur_index = 0;
     getWordsArray( search_text  );  
	 var OJSatom = '';
	 
	for(i=0; i<input_array.length; i++ ){
	 OJSatom = replace(input_array[i], wrdSeparator, '');
	 if(!validateOJSatom(OJSatom, formName, elementName))
	  return false;
	}	
	
	return true;

 }
 
function validateOJSatom(search_text, formName, elementName){

	var thisNumber;
	var thisYear;
	
	var minNumber = 0;
	var maxNumber = 260;
	var minYear  = 1993;
	var maxYear = 2010;
	
     search_text = trim(search_text);

	if(search_text.indexOf('/') == -1){
		alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n Wrong format : "+document.forms[formName].elements[elementName].value+
		      '\n\n'+fieldsMessages.Get('example')+' ' + fieldsExamples.Get(elementName));
		return false;
	}
	
	if( search_text.indexOf('/') == 0 ){
 	    alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n Official Journal number was not set ");
		return false;
	}

	if( search_text.indexOf('/') == (search_text.length-1) ){
 	    alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
		      "' \n\n Year was not set ");
		return false;
	}

	thisNumber = search_text.substring(0, search_text.indexOf('/') );
	thisYear = search_text.substring(search_text.indexOf('/')+1, search_text.length  );
	 
	if (!isOSJNumber(thisNumber)){
	 OJSnotNumberAlert(thisNumber, document.forms[formName].elements[elementName].value)
	 return false;
	}

	if (!isOSJNumber(thisYear)){
  	 OJSnotNumberAlert(thisYear, document.forms[formName].elements[elementName].value)
	 return false;
	}
	
	if( parseInt(thisNumber) < minNumber ||  parseInt(thisNumber) > maxNumber){
 	  alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	        "' \n\n  " + fieldsMessages.Get('number_OJS'));	  
      return false;
	}
	
	if( parseInt(thisYear) <= minYear ||  parseInt(thisYear) >= maxYear){
 	  alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	        "' \n\n " + fieldsMessages.Get('year_OJS') );	  
      return false;
	}
	
    return true;
 

}
 
 function dateErrorAlert(search_text, wrong_input, elementName){

			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			      "' : \n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
			      "\n"+fieldsMessages.Get('error_in_term')+"\n  " + wrong_input +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ ' ' +fieldsExamples.Get(elementName) );

}
 
 
 function OJSnotNumberAlert(numberVal, inputVal){
 	 alert( fieldsMessages.Get('error_in_field') + " 'OJ S' \n\n'" +
	        fieldsMessages.Get('your_query') +"\n "+inputVal +"\n\n '" +
 	        numberVal + "' is not a number "  
		  ); 
 }
 
 
 //
 //  validation by words, i.e. string splits by words
 //
 function validateWordSearchParameters(formName, elementName, comparedArray){

 	// if oblect document.forms[formName].elements[elementName] is not in the page --> skip validation 
	if( ! isObjectExist(formName, elementName))
	 return true;
 
	var search_correct = false;
		   
    var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());
	
	search_text  = removeExtaraSpace(search_text); 
		
    search_text = replaceBrackets(search_text);
// 
// David modification 02/06
//    	
	if (search_text == "NULL") return true;
//
// End of modification
//	
	var wrong_input = "";
	
	if(search_text.length == 0 )
	 return true;
	 
   
	input_array = new Array();
    cur_index = 0;
    substr = "";
	 // remove AND OR before

     var toArray = search_text;
     toArray = ' ' + toArray;
	 toArray = replace(toArray, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+OR_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+AND_SEPARATOR+' ', wrdSeparator );
	 toArray = replace(toArray, ' '+NOT_SEPARATOR+' ', wrdSeparator );
     getWordsArray(toArray ); 
	// check  
	for(ii=0; ii<input_array.length; ii++ ){
	    search_correct = false;    	
	      
		if(wrong_input.indexOf(wildCard) >=0 ) {
		 continue;
		} 
		 
		for( i=0; i<comparedArray.length; i++){
		  if(input_array[ii] == comparedArray[i].toUpperCase()){
		    search_correct = true;
		  }
		  if(search_correct) continue;	  
		}

		if(!search_correct) {
		
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			       "'\n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
			      "\n"+fieldsMessages.Get('error_in_term')+"\n  " + wrong_input +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );
			  
			return false;
		}		
	   
	}
	
   return true;  
 }	 

 
 
 //
 //  validation by words, i.e. string splits by words
 //
 function validateComplexSearchParameters(formName, elementName, comparedArray){
 
	// if oblect document.forms[formName].elements[elementName] is not in the page --> skip validation 
	if( ! isObjectExist(formName, elementName))
	 return true;
 	//debugger;
	var search_correct = false;
    var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());
    
	search_text  = removeExtaraSpace(search_text); 
	 
    search_text = replaceBrackets(search_text);	
    
// 
// David modification 02/06
//    	
	if (search_text == "NULL") return true;
// 
// David modification 05/07
// 	
	if (search_text == "MANULLMA") return true;
//
// End of modification
//
	 
	var wrong_input = "";

	if(search_text.length == 0)
	 return true;
	
    // remove AND OR before
	input_array = new Array();
    cur_index = 0;
    substr = "";
	var errorString = "";

     var toArray = ' ' +search_text;
// IYT 29.04.2004	 
//	 toArray = replace(toArray, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
//	 toArray = replace(toArray, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );
//	 toArray = replace(toArray, ' '+OR_SEPARATOR+' ', wrdSeparator ); //IYT
//	 toArray = replace(toArray, ' '+AND_SEPARATOR+' ', wrdSeparator ); //IYT
//	 toArray = replace(toArray, ' '+NOT_SEPARATOR+' ', wrdSeparator );

     toArray =  removeLogicOperator(search_text);
	 
     errorString =  getComplexArray(toArray );  

	// error alert from  getComplexArray
    if(errorString.length > 0 ){
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+ 
			      "'\n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
			      "\n"+fieldsMessages.Get('error_in_term')+"\n  " + errorString +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );	
	 return false;			  
	}
    
	// check  
	for(ii=0; ii<input_array.length; ii++ ){
	    search_correct = false;
    	wrong_input = input_array[ii];
    	//modification 24/11/2004
	    //wrong_input = (wrong_input.replace(/\'/g,'&apos;')).toUpperCase();
		for( i=0; i<comparedArray.length; i++){
		
		  if( getSingeAtom(input_array[ii]) == replaceBrackets(comparedArray[i].toUpperCase())){
		    search_correct = true;
		  }
		  if(search_correct) break;	  
		}

		if(!search_correct) {
		
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
			      "'\n\n"+fieldsMessages.Get('your_query') +"\n  " + search_text + 
			      "\n"+fieldsMessages.Get('error_in_term')+"\n  " + wrong_input +
				  "\n\n"+fieldsMessages.Get('example')+"\n "+ fieldsExamples.Get(elementName) );

			  
			return false;
		}		
	   
	}
	
   return true;  
 }	 

 
 //
 // check is incoming string is in the ABC
 //
 function isLetter (search_text){
 
	var letString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	var thisChar;
	var counter = 0;
	
	for(var i=0; i <search_text.length; i++ ){
	   thisChar = search_text.substring(i, i+1);	   
	   if(letString.indexOf(thisChar) != -1)
	    counter++;	   
	}
 
 	if(counter == search_text.length )
	 return true;  
	else 
	 return false;	
 
 }

 //
 // check is incoming string is in the ABC
 //
 function isDocNumber (search_text){

	var letString = '0123456789-';
	var thisChar;
	var counter = 0;
	
	for(var i=0; i <search_text.length; i++ ){
	   thisChar = search_text.substring(i, i+1);	   
	   if(letString.indexOf(thisChar) != -1)
	    counter++;	   
	}
    
    
 	if(counter == search_text.length )
	 return true;  
	else 
	 return false;	
 
 }
 
 //
 // check is incoming string is number
 //
 function isNumber(search_text){
 
	var numString = '0123456789';
	var thisChar;
	var counter = 0;
	
	for(var i=0; i <search_text.length; i++ ){
	   thisChar = search_text.substring(i, i+1);	   
	   if(numString.indexOf(thisChar) != -1)
	    counter++;	   
	}
 
 	if(counter == search_text.length )
	 return true;  
	else 
	 return false;	
	 
 
 }


 //
 // check is incoming string is number
 //
 function isOSJNumber(search_text){
 
	var numString = '0123456789*';
	var thisChar;
	var counter = 0;
	
	for(var i=0; i <search_text.length; i++ ){
	   thisChar = search_text.substring(i, i+1);	   
	   if(numString.indexOf(thisChar) != -1)
	    counter++;	   
	}
 
 	if(counter == search_text.length )
	 return true;  
	else 
	 return false;	
 
 }
 
 //
 // create array (input_array) of words separated by 'wrdSeparator'
 //
 function getWordsArray(thestring){
 
  substr =  thestring.substring(0, thestring.indexOf(wrdSeparator) );
  if( trim(substr).length > 0){
  	input_array[cur_index] = trim(substr);
	cur_index = cur_index+1;
  }

	if( (trim(thestring.substring(substr.length+1, thestring.length))).indexOf(wrdSeparator)  > 0 )
	  getWordsArray(trim(thestring.substring(substr.length+1, thestring.length)));
	else {
	  if(cur_index == 0){
        	if(thestring.indexOf(wrdSeparator) >= 0) 
	  	  		input_array[cur_index] = trim(thestring.substring(substr.length+1, thestring.length)); // and last part
 			else
	  	  		input_array[cur_index] = trim(thestring.substring(substr.length, thestring.length)); // and last part
	  } else{
	  	input_array[cur_index] = trim(thestring.substring(substr.length+1, thestring.length)); // and last part
	  }
	}

 }

    
	//
	// this is for test only 
	// shoud be deleted
   function checkGetAtomsArray(thestring){
	input_array = new Array();
        cur_index = 0;  
	 
	getAtomsArray(trim(thestring) );
	tstString = '';
	for(i=0; i<input_array.length; i++ ){
	tstString  = tstString + "\n >" +input_array[i] + "<";
	}
	
alert('getAtomsArray\n AtomsArray length = '+input_array.length+'\n\n'+tstString );
return;
	
	
   }


 //
 // retruns array base on 'thestring'
 // 
 // before invocation set next:
 //   input_array = new Array(); -  flash array
 //   cur_index = 0;   -  flash counter
 //
  function getAtomsArray(thestring){
  

    input_array=new Array();
    cur_index = 0;
    getAtomsArray_(thestring);   
    return input_array;
  }
var withQ = false;
 //
 // prepared 'input_array' array base on 'thestring'
 // 
 // before invocation set next:
 //   input_array = new Array(); -  flash array
 //   cur_index = 0;   -  flash counter
 //
  function getAtomsArray_(thestring){
  thestring = ' '+thestring;
  substr =  getSingeAtom(thestring);
  
  if( trim(substr).length > 0){
  	if(trim(substr).length > 0 && trim(substr)!='"'){

  		input_array[cur_index] = trim(substr);
		cur_index = cur_index+1;
		
	}
  }

	if( (trim(thestring.substring(substr.length+1, thestring.length))).indexOf(atomSeparator)  > 0 )
	 if(withQ)  
	  getAtomsArray_(trim(thestring.substring(substr.length+3, thestring.length)));
	 else
	  getAtomsArray_(trim(thestring.substring(substr.length+2, thestring.length)));
	  
	else {
	  if(cur_index == 0){
   	    substr = trim(thestring.substring(substr.length+2, thestring.length));
	    if(substr.length >0 && trim(substr)!='"')	  
	  	 input_array[cur_index] = getSingeAtom(substr) ; // and last part
	  } else{
	    substr = trim(thestring.substring(substr.length+2, thestring.length));
	    if(substr.length >0 && trim(substr)!='"')
	  	 input_array[cur_index] = getSingeAtom(substr) ; // and last part
	  }
	  
	  
	}

 }


 
 function getSingeAtom(inputStr){
   inputStr = trim(inputStr);
   if(inputStr.indexOf('"') < 0 && inputStr.indexOf(' ') < 0)
    return inputStr;
   
   sbstr = '';
  if(inputStr.indexOf('"')==0){
   // separator is  '"'
   inputStr = inputStr.substring(1,inputStr.length ); // remove first " 
   sbstr = inputStr.substring(0, inputStr.indexOf('"') );
   withQ = true;  // atom with comma
  } else{
  // separator is  ' ' 
   sbstr = inputStr.substring(0, inputStr.indexOf(' ') );
   withQ = false; // atom without comma
  }
  return sbstr;
  
 }

 
 //
 // retrun true if incoming string inAtom is a "Logical Operator" (AND, NOT, OR, OR NOT, AND NOT )
 //
 function isLogicOperator(inAtom){
   inAtom = (trim(inAtom)).toUpperCase();
   
   if(inAtom == OR_NOT_SEPARATOR )
    return true;
   if(inAtom == AND_NOT_SEPARATOR )
    return true;
   if(inAtom == OR_SEPARATOR)
    return true;
   if(inAtom == AND_SEPARATOR)
    return true;
   if(inAtom == NOT_SEPARATOR)
    return true;
	
   return false;	
  
 }
 
 function removeLogicOperator(inString){
 
   atomsArray = getAtomsArray(trim(inString));
   outString = ""; 
	for(i=0; i<atomsArray.length; i++ ){
	  if(isLogicOperator(atomsArray[i]))
  	   outString = outString + ' ' + wrdSeparator + ' ';
	  else{
	   if(atomsArray[i] != '~' )
  	    outString = outString + ' "' + atomsArray[i] + '" ';
	   else
  	    outString = outString + ' ' + atomsArray[i] + ' ';

	  } 
	}

   return outString;
 }
 
//
// create array of string (input_array) with " separator
// 
// returns 'Error string'
// if this string is empty --> no error
// could return error string with wrong input
//
function getComplexArray (thestring){

	 var toArray = removeLogicOperator(thestring);

// IYT 29.04.2004		 
//	 toArray = replace(toArray, ' '+OR_NOT_SEPARATOR+' ', wrdSeparator );
//	 toArray = replace(toArray, ' '+AND_NOT_SEPARATOR+' ', wrdSeparator );	 
//	 toArray = replace(toArray, ' '+OR_SEPARATOR+' ', wrdSeparator );
//	 toArray = replace(toArray, ' '+AND_SEPARATOR+' ', wrdSeparator );
//	 toArray = replace(toArray, ' '+NOT_SEPARATOR+' ', wrdSeparator );

	input_array = new Array();
    cur_index = 0; 	 
     getWordsArray(toArray );  
      
  firstQ = 0;
  secondQ = 0;   
   
   for(i=0; i<input_array.length; i++ )	{

     tmpStr = trim(input_array[i]);

	 if(tmpStr.length == 1 && tmpStr != '"'){	 
		input_array[i] = tmpStr;	
		continue;
	 }		 
	 
     	firstQ = tmpStr.indexOf('"')
     	secondQ = (tmpStr.substring(firstQ+1, tmpStr.length)).indexOf('"')+1;
		 
		  // check search request like "bla bla" (" must be in the start and end )
	 	  if( firstQ != 0 || secondQ != (tmpStr.length-1) ){
		   return tmpStr;
          } 
	 
		 if(firstQ == 0)	 
		  firstQ = 1;
		 else 
		  firstQ = 0;
	
		 if((secondQ+1) == tmpStr.length)
		  secondQ = secondQ;
		 else
		  secondQ = tmpStr.length;
		  
		  input_array[i] = tmpStr.substring(firstQ, secondQ);		  
		  
		  input_array[i] = tmpStr;		  
   }
   
   return '';
 }
 
 function alertArray(arrayToAlert){
  alrtStr = '';
  for(i=0; i<arrayToAlert.length; i++ )
   alrtStr = alrtStr + '\n >'+ arrayToAlert[i] + '<';
  
  alert('Debug array print : \n' +alrtStr); 
 }
 
//
// Replaces 'text' with 'by' in 'string' 
//
function replace(string, text, by) {
    var strLength = string.length, txtLength = text.length;
	
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
	
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;
    var newstr = string.substring(0,i) + by;
    if (i+txtLength < strLength)
        newstr += replace(string.substring(i+txtLength,strLength),text,by);
    return newstr;
}




//
// check LBE operator (<, > , <<, >>,  <=, >=)
//
function checkLBE(chkString){

 var replacedWith = '@';
 chkString = replaceLBE(chkString, replacedWith);
 
 if(!isOnce(chkString,replacedWith ))
  return false;
  
 return true; 
 
}


//
// check operator in the string 
// 
//  operator = @
function isOnce(inputString, operator){
 var firstQ = 0;
 firstQ = inputString.indexOf(operator);
 secondQ = 0;

 if(firstQ >= 0){
    secondQ  = (inputString.substring(firstQ+operator.length, inputString.length )).indexOf(operator);
    if(secondQ >= 0)
	return false;
 }
 return true;
}



function replaceLBE(chkString, replacedWith){
 var ll = '<<';
 var bb = '>>';
 var le = '<=';
 var be = '>=';
 var l = '<';
 var b = '>';
 chkString = replace(chkString, ll, replacedWith);
 chkString = replace(chkString, bb, replacedWith);
 chkString = replace(chkString, le, replacedWith);
 chkString = replace(chkString, be, replacedWith);
 chkString = replace(chkString, l, replacedWith);
 chkString = replace(chkString, b, replacedWith);
  
 return chkString; 
 
}

function replaceLBE_forDate(chkString, replacedWith){
 var ll = '<<';
 var le = '<=';
 var be = '>=';
 var l = '<';
 var b = '>';
 chkString = replace(chkString, ll, replacedWith);
 chkString = replace(chkString, le, replacedWith);
 chkString = replace(chkString, be, replacedWith);
 chkString = replace(chkString, l, replacedWith);
 chkString = replace(chkString, b, replacedWith);
  
 return chkString; 
 
}


function replaceBrackets(strWithBrackets){
  ohneBrackets = strWithBrackets;
  ohneBrackets = replace(ohneBrackets, '(', '');
  ohneBrackets = replace(ohneBrackets, ')', '');
  return ohneBrackets;
}

//
// retruns true if two operator odin-za-drugim ( AND OR , OR <<, <>, etc.)
//
function checkDoubleOperatiors(opStr){
	 opStr = replace(opStr, ' ' , '' );
	 if(opStr.indexOf(wrdSeparator+wrdSeparator) >0 )
	  return true;
	 else
	  return false; 
}
 
 //
 // trim string 
 //
function trim(thestring){
   var newstring=thestring;
   if (thestring) {
	   for (j=0; j<thestring.length; j++){
	     if (newstring.substr(0,1) == " "){
	        newstring=newstring.substr(1);
	     }
	     if (newstring.substr(newstring.length-1,1) == " "){ 
	        newstring = newstring.substr(0,newstring.length-1);
	     }
	   }
	}
  return newstring;
}


var inputForRemoveExtaraSpace_ = "";
//
// removed extra space from string
//
function removeExtaraSpace(inputStr){

 inputStr = replace(inputStr, ' ' , '_');
 inputForRemoveExtaraSpace_ = inputStr; 
 inputStr = removeExtaraSpace_();
 inputStr = replace(inputStr, '_' , ' ');  
 return inputStr;
}


function removeExtaraSpace_(){

 inputForRemoveExtaraSpace_ = replace(inputForRemoveExtaraSpace_, '__', '_');
 while(inputForRemoveExtaraSpace_.indexOf('__')>0)
  removeExtaraSpace(inputForRemoveExtaraSpace_);
 
 return inputForRemoveExtaraSpace_; 
}

 function validateFT(formName, elementName, nbChar){
    if( ! isObjectExist(formName, elementName)) return true;
  
    var search_text = trim(document.forms[formName].elements[elementName].value.toUpperCase());
    if(search_text.length == 0 ) return true;
	
	search_text = replace(search_text, '=',' = ');
	search_text = replace(search_text, '[',' [ ');
	search_text = replace(search_text, ']',' ] ');
	search_text = replace(search_text, ')',' ) ');
	search_text = replace(search_text, '(',' ( ');

	search_text = replace(search_text, '<',' < ');
	search_text = replace(search_text, '>',' > ');	 
	 
	search_text = removeExtaraSpace(search_text);
	
	//added on 05/2007
	var countBracket = 0;
	var quoteOpen = false;
	var s = false;
	
	for (i=0; i<search_text.length; i++){
		var c = search_text.substr(i, 1);
		var e = search_text.substr(0, 1);
		var d = search_text.substr(search_text.length-1, search_text.length);
		if (c == '\"') quoteOpen = !quoteOpen;
		if ((c == '(') && !quoteOpen) countBracket++;
		if ((c == ')') && !quoteOpen) countBracket--;
		/*if ((i==0) && (c == '*' || c =='-' || c =='+' || c =='?')) s = !s;*/
		if ((e == '*') && (d == '*' || d == '-' || d == '+' || d == '/')) s = !s;
		
		if (countBracket < 0){
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	 			"'\n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
	  			'\n' + fieldsMessages.Get('error_in_term')+ " " +  errorString + 
	  			'\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get('fulltext_quoting'));	
			return false;
		}
	}

	//alert(search_text.length);
    if (s){
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	 			"'\n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
	  			'\n' + fieldsMessages.Get('error_in_term')+ " " +  errorString + 
	  			'\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get('fulltext_star'));	
			return false;
		}
	if (quoteOpen) {
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	 			"'\n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
	  			'\n' + fieldsMessages.Get('error_in_term')+ " " +  errorString + 
	  			'\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get('fulltext_quoting'));	
			return false;
		}
	if (countBracket != 0){
			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	 			"'\n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
	  			'\n' + fieldsMessages.Get('error_in_term')+ " " +  errorString + 
	  			'\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get('fulltext_quoting'));	
			return false;
		}
	//end add
	
    vArray = new Array();
	
	var nextFT = true;
	
    vArray = getAtomsArray(search_text);
	var errorString ;
	//added on 26/07/2006 by DN
	var num = 2;
	//end add
    for(i=0; i<vArray.length; i++ ) {
      	var myString = trim(vArray[i]);
      	var myStringlen=myString.length;	
      
      	if (myString == "FT") nextFT = true;
      	if (myString == "]") nextFT = false;
     
	  	errorString = myString;

      	if (myString == "") {
        	alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
	 			"'\n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
	  			'\n' + fieldsMessages.Get('error_in_term')+ " " +  errorString + 
	  			'\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
        	return false;
      	}
      
      
        //added on 26/07/2006 by DN
        
        if (myString == "PC") var num = 1;
        
        
        //end add
        
      	if (myString.indexOf("*") >= 0) {

      		

      		if (nextFT && (myString.indexOf("*") <= num) && (myStringlen - myString.indexOf("*") <= 3)) {
      			alert(fieldsMessages.Get('error_in_field') + " '"+fieldsName.Get(elementName)+
					"' \n\n "+fieldsMessages.Get('your_query')+" " +document.forms[formName].elements[elementName].value+
	     			'\n' + fieldsMessages.Get('error_in_term')+ " " + errorString + 
		 			'\n\n'+fieldsMessages.Get('example')+ fieldsExamples.Get(elementName));	
            	return false;
      		} 
      	}
    }
    return true;
    
 }
//
// hash map with examples
//
var fieldsExamples = {
	Set : function(key_,value_) {this[key_] = value_;},
	Get : function(key_) {return this[key_];}
}

fieldsExamples.Set('OJ_textfield', '7/2001   \n\t << 7/2001 \n\t  170/2001<<174/2001 ');
fieldsExamples.Set('country_textfield', 'NL or DE and FR');
fieldsExamples.Set('contract_textfield', '"Supply contract" OR "Combined contract"');
fieldsExamples.Set('procedure_textfield', '"Qualification system" OR "Call for expressions of interest"');
fieldsExamples.Set('document_textfield', '"Design contest" OR "Corrigenda"');
fieldsExamples.Set('CPV_textfield', '1313* or 22114310');
fieldsExamples.Set('type_author_textfield', '"Central government" OR "Local authorities"');
fieldsExamples.Set('heading_textfield', 'COES OR CONS OR C198');
fieldsExamples.Set('regulation_textfield', '"Community institutions" OR "European Communities"');
fieldsExamples.Set('NUTS_textfield', 'NL413 OR DE9*');
fieldsExamples.Set('deadline_textfield', '20010630');
fieldsExamples.Set('activity_textfield', '"Housing and community amenities" OR "Social protection"');
fieldsExamples.Set('docnumber_textfield', '586-2000');
fieldsExamples.Set('datedoc_textfield', '20010630');
fieldsExamples.Set('publication_textfield', ' 20010630');
fieldsExamples.Set('expert_search', '  CY = [DE OR CH AND NOT AT] ');
fieldsExamples.Set('fulltext_textfield', '  Please use at least 3 characters for truncation.');
fieldsExamples.Set('expert_textarea', '  Please use at least 3 characters for truncation.');
fieldsExamples.Set('fulltext_quoting', '  There is a problem with the Punctuation.');
fieldsExamples.Set('fulltext_star', '  Simultaneous right and left truncation is not permitted.');
fieldsExamples.Set('CDATE', ' 20060630');
fieldsExamples.Set('LLOGIN', ' 20060630');



