/********************************************************************************/
/*                           BIBLIOGRAFIA.JS                                    */
/********************************************************************************/

FILE_ERRORE_BIBLIOGRAFIA = "../Login/Errore.htm";
FILE_LOGIN_BIBLIOGRAFIA = "../Login/Login.php?FileName=../Bibliografia/RicercaBibliografia_Base.php";

IDS_NESSUN_MESSAGGIO			 = -1;
IDS_ERR_STRINGA         		 =  0;

Vett_Msg = [ "Controlla la sintassi della stringa!" ];

/********************************************************************************/
/* FUNC_NAME   : ShowAlert                                                      */
/* DEVELOPER   : Marangoni Luca													*/
/* DATE        : 26.02.2004														*/
/* DESCRIPTION : Funzione che visualizza il messaggio indicato.                 */
/* PARAMETERS  : id_messaggio = messaggio da visualizzare.                      */
/* GLOBALS     : Vett_Msg = vettore dei messaggi.								*/
/* RETURN      :																*/
/********************************************************************************/

function ShowAlert( id_messaggio )
{
if( id_messaggio >= 0 && Vett_Msg[ id_messaggio ].length > 0 )
	alert( Vett_Msg[ id_messaggio ]);
}

/********************************************************************************/
/* FUNC_NAME   : elenco_bibliografia											*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che sistema la query per la ricerca avanzata in       */
/*               bibliografia.                                                  */
/* DATE        : 05.12.2003														*/
/* PARAMETERS  :																*/
/* GLOBALS     :																*/
/* RETURN      :																*/
/*																				*/
/* AUTHOR      : Marangoni Luca                                                 */
/* 26.02.2004  : Aggiunto l'id di sessione nei parametri passati al modulo che  */
/*               visualizza l'elenco delle bibliografie.                        */
/*																				*/
/* AUTHOR      : Marangoni Luca                                                 */
/* 21.05.2004  : Il soggetto non viene più inserito come testo ma viene fatto   */
/*               selezionare attraverso una listbox. Questo perchè il soggetto  */
/*               non è più un campo all'interno della tabella delle bibliografie*/
/*               ma è stato messo in un'altra tabella.                          */
/********************************************************************************/

function elenco_bibliografia()
{
var autore , autore_contributo , curatore_editore , titolo , titolo_contributo , casa_editrice;
var /*soggetto , */secolo , toponimo;
var soggetti_includere = "" , soggetti_escludere = "";
var comando = "ElencoBibliografia.php?";
var err;
var first;

autore = document.all.Autore.value;
autore_contributo = document.all.AutoreContributo.value;
curatore_editore = document.all.CuratoreEditore.value;
titolo = document.all.Titolo.value;
titolo_contributo = document.all.TitoloContributo.value;
casa_editrice = document.all.CasaEditrice.value;
//soggetto = document.all.Soggetto.value;
secolo = document.all.Secolo.value;
toponimo = document.all.Toponimo.value;

autore = CheckStringa( autore , 1 );
if( autore == "false" )
	{
	document.all.Autore.focus();
	return( false );
	}
autore_contributo = CheckStringa( autore_contributo , 1 );
if( autore_contributo == "false" )
	{
	document.all.AutoreContributo.focus();
	return( false );
	}
curatore_editore = CheckStringa( curatore_editore , 1 );
if( curatore_editore == "false" )
	{
	document.all.CuratoreEditore.focus();
	return( false );
	}
titolo = CheckStringa( titolo , 1 );
if( titolo == "false" )
	{
	document.all.Titolo.focus();
	return( false );
	}
titolo_contributo = CheckStringa( titolo_contributo , 1 );
if( titolo_contributo == "false" )
	{
	document.all.TitoloContributo.focus();
	return( false );
	}
casa_editrice = CheckStringa( casa_editrice , 1 );
if( casa_editrice == "false" )
	{
	document.all.CasaEditrice.focus();
	return( false );
	}
/*soggetto = CheckStringa( soggetto , 1 );
if( soggetto == "false" )
	{
	document.all.Soggetto.focus();
	return( false );
	}*/
secolo = CheckStringa( secolo , 2 );
if( secolo == "false" )
	{
	document.all.Secolo.focus();
	return( false );
	}
toponimo = CheckStringa( toponimo , 1 );
if( toponimo == "false" )
	{
	document.all.Toponimo.focus();
	return( false );
	}

first = true;
for( i = 0 ; i < document.all.IDSoggettiIncludere.length ; i++ )
    {   
    if( document.all.IDSoggettiIncludere[ i ].selected )
		{
		if( first )
			first = false;
		else
	        soggetti_includere += ",";
        soggetti_includere += document.all.IDSoggettiIncludere[ i ].value;
		}
    }

first = true;
for( i = 0 ; i < document.all.IDSoggettiEscludere.length ; i++ )
    {   
    if( document.all.IDSoggettiEscludere[ i ].selected )
		{
		if( first )
			first = false;
		else
	        soggetti_escludere += ",";
        soggetti_escludere += document.all.IDSoggettiEscludere[ i ].value;
		}
    }

comando += "Autore=" + autore;
comando += "&AutoreContributo=" + autore_contributo;
comando += "&CuratoreEditore=" + curatore_editore;
comando += "&Titolo=" + titolo;
comando += "&TitoloContributo=" + titolo_contributo;
comando += "&CasaEditrice=" + casa_editrice;
//comando += "&Soggetto=" + soggetto;
comando += "&SoggettiIncludere=" + soggetti_includere;
comando += "&SoggettiEscludere=" + soggetti_escludere;
comando += "&Secolo=" + secolo;
comando += "&Toponimo=" + toponimo;
comando += "&TipoRicerca=" + document.all.TipoRicerca.value;
comando += "&SessionID=" + document.all.SessionID.value;
comando += "&NRisultati=" + document.all.NRisultati.value;
alert(document.all.NRisultati.value);
window.open( comando , '_self' );
}

/********************************************************************************/
/* FUNC_NAME   : CheckStringa													*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che richiama delle funzioni che controllano e         */
/*               sistemano la stringa passata.                                  */
/* DATE        : 05.12.2003														*/
/* PARAMETERS  : str = stringa da controllare.                                  */
/*               tipo = 1 la stringa è un testo, 2 è un numero.                 */
/* RETURN      :																*/
/********************************************************************************/

function CheckStringa( str , tipo )
{
str = str.toUpperCase();
str = SostituisciApiciDoppi( str );
str = EliminaCaratteriSpuri( str );
str = RimuoviSpazi( str , '(' , ')' )
str = RimuoviSpazi( str , '\'' , '\'' )
str = EliminaSpaziMultipli( str );
if( !ControllaPunteggiatura( str ))
	{
	ShowAlert( IDS_ERR_STRINGA );
	str = "false";
	}
else
	str = InserisciApici( str , tipo );

return( str )
}

/********************************************************************************/
/* FUNC_NAME   : SostituisciApiciDoppi											*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che elimina il carattere '"' dalla stringa passata e  */
/*               lo sostituisce con il carattere '''.                           */
/* DATE        : 09.12.2003														*/
/* PARAMETERS  : str_orig = stringa originale.                                  */
/* RETURN      : la stringa corretta.                                           */
/********************************************************************************/

function SostituisciApiciDoppi( str_orig )
{
var str_corretta = "";
var exp1 = /\"/g;

str_corretta = str_orig.replace( exp1 , "'" );

return( str_corretta );
}

/********************************************************************************/
/* FUNC_NAME   : EliminaSpaziMultipli											*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che elimina gli spazi multipli dalla stringa passata. */
/* DATE        : 09.12.2003														*/
/* PARAMETERS  : str_orig = stringa originale.                                  */
/* RETURN      : la stringa corretta.                                           */
/********************************************************************************/

function EliminaSpaziMultipli( str_orig )
{
var str_corretta = "";
var pos;
var exp1 = /  /g;

str_corretta = str_orig;
pos = str_corretta.indexOf( "  " , 0 );
while( pos > -1 )
	{
	str_corretta = str_corretta.replace( exp1 , " " );
	pos = str_corretta.indexOf( "  " , 0 );
	}

return( str_corretta );
}

/********************************************************************************/
/* FUNC_NAME   : EliminaCaratteriSpuri											*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che mantiene solo i caratteri compresi tra A e Z, tra */
/*               0 e 9 e i seguenti : ' ', '(' , ')' e '''.                     */
/* DATE        : 09.12.2003														*/
/* PARAMETERS  : str_orig = stringa originale.                                  */
/* RETURN      : la stringa corretta.                                           */
/********************************************************************************/

function EliminaCaratteriSpuri( str_orig )
{
var str_corretta = "";
var car;
var i;

for( i = 0 ; i < str_orig.length ; i++ )
    {
	car = str_orig.charAt( i );

    if(( car >= 'A' && car <= 'Z' ) || ( car >= '0' && car <= '9' ) || 
	  car == ' ' || car == '(' || car == ')' || car == '\'' || car == '-' )
        str_corretta += car;
    }

return( str_corretta );
}

/********************************************************************************/
/* FUNC_NAME   : RimuoviSpazi													*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che elimina gli spazi dopo il carattere "car_open" e  */
/*               prima del carattere "car_close".                               */
/* DATE        : 09.12.2003														*/
/* PARAMETERS  : str_orig = stringa originale.                                  */
/*               car_open = carattere di apertura.                              */
/*               car_close = carattere di chiusura.                             */
/* RETURN      : la stringa corretta.                                           */
/********************************************************************************/

function RimuoviSpazi( str_orig , car_open , car_close )
{
var str_corretta = "" , work = "";
var car;
var i , j , cnt_car , pos;
var is_open;

is_open = false;
cnt_car = 0;
for( i = j = 0 ; i < str_orig.length ; i++ )
    {
	car = str_orig.charAt( i );

	if( !is_open && car == car_open )
		{
		is_open = true;
		pos = str_corretta.length;
		str_corretta += car;
		cnt_car = 0;
		j++;

		while( i < str_orig.length && str_orig.charAt( i + 1 ) == ' ' )
			i++;
		}
	else if( is_open && car == car_close )
		{
		while( j > 0 && str_corretta.charAt( j - 1 ) == ' ' )
			j--;

		work = str_corretta.substr( 0 , j );
		str_corretta = work;

		if( cnt_car == 0 )
			{
			work = str_corretta.substr( 0 , pos );
			str_corretta = work;
			}
		else
			{
			str_corretta += car;
			j++;
			}

		is_open = false;
		}
	else
		{
		str_corretta += car;
		j++;
		cnt_car++;
		}
    }

return( str_corretta );
}

/********************************************************************************/
/* FUNC_NAME   : ControllaPunteggiatura											*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che controlla che nella stringa passata sia corretta  */
/*               la punteggiatura. (non ci siano parentesi o apici che non      */
/*               vengono chiusi, non ci siano chiusure doppie, all'interno degli*/
/*               apici non ci siano parentesi, non ci siano parentesi dentro    */
/*               altre parentesi.)                                              */
/* DATE        : 09.12.2003														*/
/* PARAMETERS  : str_orig = stringa originale.                                  */
/* RETURN      : false se c'è un errore, true in caso contrario.                */
/********************************************************************************/

function ControllaPunteggiatura( str_orig )
{
var ret;
var car;
var i , cnt_ap , cnt_par;

ret = true;
cnt_ap = cnt_par = 0;

for( i = 0 ; i < str_orig.length && ret ; i++ )
    {
	car = str_orig.charAt( i );

    if( car == '(' )
		{
		if( cnt_ap > 0 || cnt_par > 0 )
			ret = false;
		else
			cnt_par++;
		}
	else if( car == ')' )
		{
		if( cnt_ap > 0 || cnt_par != 1 )
			ret = false;
		else
			cnt_par--;
		}
	else if( car == '\'' )
		cnt_ap = ( cnt_ap == 0 ) ? 1 : 0;
    }

if( cnt_ap != 0 || cnt_par != 0 )
	ret = false;

return( ret );
}

/********************************************************************************/
/* FUNC_NAME   : InserisciApici													*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che aggiunge gli apici prima e dopo le paraole con    */
/*               il testo da ricercare.                                         */
/* DATE        : 09.12.2003														*/
/* PARAMETERS  : str_orig = stringa originale.                                  */
/*               tipo = 1 la stringa è un testo, 2 è un numero.                 */
/* RETURN      : torna la stringa con gli apici.                                */
/********************************************************************************/

function InserisciApici( str_orig , tipo )
{
var work = "" , str_corretta = "";
var keyword = new Array();
var car;
var i , cnt_keyword , start , len;
var apici_open , parola , copia , Iskeyword , condiz_not;

cnt_keyword = start = len = 0;
apici_open = parola = copia = false;

for( i = 0 ; i < str_orig.length ; i++ )
    {
	car = str_orig.charAt( i );

	parola = ( car == ' ' || car == '(' || car == ')' || car == '\'' ) ? false : true;

	if( parola || ( car == ' ' && apici_open ))
		{
		len++;
		if( i == str_orig.length - 1 )
			copia = true;
		}
	else
		{
		if( car == ' ' )
			copia = true;
		else if( car == '(' || car == ')' )
			{
			copia = true;

			if( car == '(' )
				len = 1;
			else
				{
				if( len > 0 )
					{
					keyword[ cnt_keyword++ ] = str_orig.substr( start , len );
					start += len;
					}
				len = 1;
				}
			}
		else
			{
			apici_open = ( apici_open ) ? false : true;
			if( apici_open )
				start++;
			else
				copia = true;
			}
		}
	if( copia )
		{
		copia = false;
		if( len > 0 )
			{
			keyword[ cnt_keyword++ ] = str_orig.substr( start , len );
			start += len;
			if( car != '(' )
				start++;
    		if( car == '\'' && !apici_open && str_orig.charAt( i + 1 ) == ' ' )
				start++;
			}
		len = 0;
		}
    }

condiz_not = false;
for( i = 0 ; i < cnt_keyword ; i++ )
	{
	Iskeyword = false;
	if( keyword[ i ] != "AND" && keyword[ i ] != "OR" && keyword[ i ] != "NOT" &&
	  keyword[ i ] != "(" && keyword[ i ] != ")" )
	    Iskeyword = true;
	else if( keyword[ i ] == "NOT" )
		condiz_not = true;

	if( Iskeyword )
		{
		str_corretta += "§";
		if( condiz_not )
			{
			str_corretta += " NOT";
			condiz_not = false;
			}
		if( tipo == 1 )
			str_corretta += " LIKE '%25";
		else if( tipo == 2 )
			str_corretta += " %3D ";
		}
	if( !condiz_not )
		str_corretta += keyword[ i ];

	if( Iskeyword && tipo == 1 )
		str_corretta += "%25'";

	if( i < cnt_keyword && keyword[ i ] != "(" && keyword[ i + 1 ] != ")" )
		str_corretta += " ";
	}
return( str_corretta );
}

/********************************************************************************/
/* FUNC_NAME   : SostituisciCaratteriParticolari								*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione che sostituisce alcuni caratteri presenti nella       */
/*               stringa con il valore corrispondente per poterlo passare in un */
/*               URL.                                                           */
/* DATE        : 26.02.2004														*/
/* PARAMETERS  : stringa_orig = stringa di partenza.                            */
/* GLOBALS     :																*/
/* RETURN      : stringa corretta.                                              */
/********************************************************************************/

function SostituisciCaratteriParticolari( stringa_orig )
{
var stringa;
var rep1 = /%/g;

stringa = stringa_orig.replace( rep1 , "%25" );
return( stringa );
}

/********************************************************************************/
/* FUNC_NAME   : CheckSessionID													*/
/* DEVELOPER   : Marangoni Luca													*/
/* DESCRIPTION : Funzione di controllo dell'id di sessione. Se c'è un errore    */
/*               viene visualizzato un file, altrimenti niente.                 */
/* DATE        : 26.02.2004														*/
/* PARAMETERS  : Errore = 1 se c'è l'errore e bisogna visualizzare il file.     */
/*               file = nome del file da visualizzare.                          */
/*               SessionID = id di sessione dell'utente.                        */
/* GLOBALS     :																*/
/* RETURN      :																*/
/********************************************************************************/

function CheckSessionID( Errore , file , SessionID )
{
var comando = "";

if( Errore == 1 )
	{
	comando = file;
	if( SessionID.length > 0 )
		comando += "&SessionID=" + SessionID;

	location.replace( comando );
	}
}

/********************************************************************************/


