﻿//////////////////////////////// FTS

function	CheckSearchString( inTextFieldName, andAsDefOperator, outVal )
{
	var defOperator = " AND ";
	if (!andAsDefOperator)
		defOperator = " OR ";
	var	result = -1;
	
	outVal.value = "";
	outVal.wasSingleLetter = false;
	
	if( inTextFieldName == null )
		window.alert( "A GDZIE POLE TEKSTOWE \"" + inTextFieldName + "\" ???" );
	else
	{	
		var	inQuota = false;
		var	minWordLength = 1000;
		var	prevWord = "";
		var	dstWord = "";
		var	Wyrazy = inTextFieldName.value.split( " " );
		var firstWord = "";
		var lastWord = "";
		
	  for( var i = 0; i < Wyrazy.length; i++ )
	  {
			var	Slowo = Wyrazy[ i ];
			var	dlSlowo = Slowo.length;

			if( ( ( Slowo.charAt( 0 ) == "(" ) || ( Slowo.charAt( 0 ) == ")" ) ) &&
					( ( Slowo.charAt( Slowo.length - 1 ) == "(" ) || ( Slowo.charAt( Slowo.length - 1 ) == ")" ) ) )
				Slowo = Slowo.substr( 1, Slowo.length - 2 );
			else if( ( Slowo.charAt( 0 ) == "(" ) || ( Slowo.charAt( 0 ) == ")" ) )
				Slowo = Slowo.charAt( 0 ) + " " + Slowo.substr( 1, 1000 );
			else if( ( Slowo.charAt( Slowo.length - 1 ) == "(" ) || ( Slowo.charAt( Slowo.length - 1 ) == ")" ) )
				Slowo = Slowo.substr( 0, Slowo.length - 1 ) + " " + Slowo.charAt( Slowo.length - 1 );
				
			if( Slowo == "" )
				;
			else if( inQuota )
			{
				if( Slowo.charAt( 0 ) == "\"" )	//	cudzyslow zamykajacy na poczatku
				{
					if( dstWord != "" )
						dstWord = "\"" + dstWord + "\"";
					inQuota = false;
				}
				else if( Slowo.charAt( dlSlowo - 1 ) == "\"" )	//	zamykajacy na koncu
				{
					if( dlSlowo == 2 )	//	wyraz jednoliterowy
					{
						dstWord = "\"" + dstWord + "\"";
						outVal.wasSingleLetter = true;
					}
					else
					{
						if( dstWord != "" )
							dstWord = "\"" + dstWord + " " + Slowo;
						else
							dstWord = "\"" + Slowo;
					};
					inQuota = false;
				}
				else
				{
					if( dlSlowo == 1 )	//	wyraz jednoliterowy
					{
						if( ( Slowo == "(" ) || ( Slowo == ")" ) )
							outVal.value += Slowo;
						else
							outVal.wasSingleLetter = true;
					}
					else
					{
						if( dstWord != "" )
							dstWord += " ";
						dstWord += Slowo;
					};
				};
			}
			else
			{
				dstWord = "";
				
				if( ( Slowo.toUpperCase() == "I" ) || ( Slowo.toUpperCase() == "AND" ) )
					dstWord = "AND";
				else if( ( Slowo.toUpperCase() == "LUB" ) || ( Slowo.toUpperCase() == "OR" ) )
					dstWord = "OR";
				else if( ( Slowo.toUpperCase() == "NIE" ) || ( Slowo.toUpperCase() == "NOT" ) )
					dstWord = "NOT";
				else if( ( Slowo.toUpperCase() == "OBOK" ) || 
						( Slowo.toUpperCase() == "BLISKO" ) || ( Slowo.toUpperCase() == "NEAR" ) )
					dstWord = "NEAR";
				else if( Slowo.charAt( 0 ) == "\"" )
				{
					if( dlSlowo == 1 )	//	sam cudzyslow otwierajacy
						inQuota = true;
					else if( Slowo.charAt( dlSlowo - 1 ) == "\"" )	//	jest tez cudzyslow zamykajacy
					{
						if( dlSlowo == 2 )	//	patologiczna para cudzyslowow
							;
						else if( dlSlowo == 3 )	//	jednoliterowe slowo wewnatrz cudzyslowow
							outVal.wasSingleLetter = true;
						else	//	dluzsze slowo wewnatrz cudzyslowow
							dstWord = Slowo;
					}
					else
					{
						inQuota = true;
						if( dlSlowo == 2 )	//	jednoliterowe slowo
							outVal.wasSingleLetter = true;
						else
							dstWord = Slowo.substring( 1, dlSlowo );
					};
				}
				else
				{
					if( dlSlowo == 1 )	//	sloowo jednoliterowy
					{					
						if( ( Slowo == "(" ) || ( Slowo == ")" ) )
							outVal.value += Slowo;
						else
							outVal.wasSingleLetter = true;
					}
					else if( Slowo.charAt( dlSlowo - 1 ) == '*' )
						dstWord = "\"" + Slowo + "\"";
					else
						//	dstWord = Slowo;
						dstWord = "\"" + Slowo + "\"";
				};	//	else
			};	//	else

			if( ( ! inQuota ) && ( dstWord != "" ) )
			{
				if( ( outVal.value != "" ) && ( outVal.value != "(" ) )
				{
					if( ( prevWord != "AND" ) && ( prevWord != "OR" ) && ( prevWord != "NEAR" ) && ( prevWord != "NOT" ) &&
							( dstWord != "AND" ) && ( dstWord != "OR" ) && ( dstWord != "NEAR" ) )
						outVal.value += defOperator;
					else
						outVal.value += " ";
				};	//	if()
				outVal.value += dstWord;
				prevWord = dstWord
				
				if( ( dstWord != "OR" ) && ( dstWord.length < minWordLength ) )
					minWordLength = dstWord.length;				

				dstWord = "";
			};	//	if(0

			prevWord = prevWord.replace( /\"/g, "" );
			prevWord = prevWord.replace( /\(/g, "" );
			prevWord = prevWord.replace( /\)/g, "" );
			prevWord = prevWord.replace( / /g, "" );
			if( firstWord == "" )
				firstWord = prevWord;
			lastWord = prevWord;
		};	//	for()

		if( outVal.value.indexOf( "OR NOT" ) != -1 )
			result = -4;
		else if( outVal.value.indexOf( "NOT OR" ) != -1 )
			result = -5;
		else if( outVal.value.indexOf( "NOT AND" ) != -1 )
			result = -6;
		else if( firstWord == "NOT" )
			result = -3;
		else if( firstWord == "AND" )
			result = -7;
		else if( firstWord == "OR" )
			result = -8;
		else if( firstWord == "NEAR" )
			result = -9;
		else if( inQuota )
			result = -2;
		else if( lastWord == "NOT" )
			result = -10;
		else if( lastWord == "AND" )
			result = -11;
		else if( lastWord == "OR" )
			result = -12;
		else if( lastWord == "NEAR" )
			result = -13;
		else if( minWordLength == 1000 )
			result = 0;
		else
			result = minWordLength;
	};

//window.alert( "firstWord " + firstWord );
//window.alert( "lastWord " + lastWord );

	return	result;
}

//
//
//

function CheckAdvancedSearchFTSPLToLatin( inTextFieldName, andAsDefOperator, blockEmpty )
{
	var	pom = new Object();

	var	result = CheckSearchString( inTextFieldName, andAsDefOperator, pom);
	if( pom.wasSingleLetter )
		window.alert( "Wyrazy jednoliterowe zostały usunięte z zapytania, \r\n" +
				"gdyż są one i tak pomijane przez wyszukiwarkę pełnotekstową." );

	if( result == -1 )
	{
		window.alert( "Niepoprawny warunek" );
		return false;
	}
	else if( result == -2 )	
	{
		window.alert( "Nie zamknięty cudzysłów" );
		return false;
	}
	else if( result == -3 )
	{
		window.alert( "Pytanie nie może rozpoczynać się od NOT" );
		return false;
	}
	else if( result == -4 )
	{
		window.alert( "Konstrukcja OR NOT nie jest dozwolona" );
		return false;
	}
	else if( result == -5 )
	{
		window.alert( "Konstrukcja NOT OR nie jest dozwolona" );
		return false;
	}
	else if( result == -6 )
	{
		window.alert( "Konstrukcja NOT AND nie jest dozwolona" );
		return false;
	}

	else if( result == -7 )
	{
		window.alert( "Pytanie nie może rozpoczynać się od AND" );
		return false;
	}
	else if( result == -8 )
	{
		window.alert( "Pytanie nie może rozpoczynać się od OR" );
		return false;
	}
	else if( result == -9 )
	{
		window.alert( "Pytanie nie może rozpoczynać się od NEAR" );
		return false;
	}
	else if( result == -10 )
	{
		window.alert( "Pytanie nie może kończyć się na NOT" );
		return false;
	}
	else if( result == -11 )
	{
		window.alert( "Pytanie nie może kończyć się na AND" );
		return false;
	}
	else if( result == -12 )
	{
		window.alert( "Pytanie nie może kończyć się na OR" );
		return false;
	}
	else if( result == -13 )
	{
		window.alert( "Pytanie nie może kończyć się na NEAR" );
		return false;
	}
	else if( result == 0 )
	{
		if (blockEmpty)
		{
			window.alert( "Twoje pytanie jest puste..." );
			return false;
		}
	}
	else if( result < 3 )
	{
		window.alert( "Szukać można wyłącznie słów dłuższych niż dwa znaki" );
		return false;
	}

	inTextFieldName.value = pom.value;
		
	return true;

}
////////////////////////////////////