/********************************************************************************/
/*                             FUNCTION.JS                                      */
/********************************************************************************/

FILE_ERRORE_ARTICOLI = "../Login/Errore.htm";
FILE_LOGIN_ARTICOLI = "../Login/Login.php?FileName=../Pubblicazioni/RicercaArticoli.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   : CheckDatiArticoli                                              */
/* DEVELOPER   : Cozzi Daniel                                                   */
/* DESCRIPTION : Funzione che convalida i campi presenti nel form per inserire i*/
/*               criteri di ricerca degli articoli.                             */
/* DATE        : 16.03.2005                                                     */
/* PARAMETERS  : theform = riferimento al form con i campi da controllare.      */
/* RETURN      : TRUE se non ci sono errori, FALSE in caso contrario.           */
/********************************************************************************/

function CheckDatiArticoli( theForm )
{
var ret;

ret = false;

if( theForm.CognomeNome1.value.length == 0 && theForm.CognomeNome2.value.length == 0 && 
    theForm.Titolo.value.length == 0 && theForm.Cod.value.length == 0 && theForm.Sogg.value.length == 0 &&
    theForm.Local.value.length == 0 && theForm.SecoloDA.value.length == 0 && theForm.SecoloA.value.length == 0 &&
    theForm.PChiave.value.length == 0)
	{
	alert( "Inserisci almeno un criterio per la ricerca!" );
	theForm.CognomeNome1.focus();
	}
else
	ret = true;

return( ret );
}

/********************************************************************************/
/* FUNC_NAME   : elenco_articoli                                                */
/* DEVELOPER   : Cozzi DAniel                                                   */
/* DESCRIPTION : Funzione che sistema la query per la ricerca in 'Articoli    ' */
/* DATE        : 16.03.2005                                                     */
/* PARAMETERS  :                                                                */
/* RETURN      :                                                                */
/********************************************************************************/

function elenco_articoli()
{
var autore_1 , autore_2 , titolo , codice;
var soggetto , localita , secoloDa , secoloA , pchiave;
var comando = "ElencoArticoli.php?";
var err;

autore_1 = document.all.CognomeNome1.value;
autore_2 = document.all.CognomeNome2.value;
titolo = document.all.Titolo.value;
codice = document.all.Cod.value;
soggetto = document.all.Sogg.value;
localita = document.all.Local.value;
secoloDa = document.all.SecoloDa.value;
secoloA = document.all.SecoloA.value;
pchiave = document.all.PChiave.value;
ere = document.all.Ere.value;

autore_1 = CheckStringa( autore_1 , 1 );
if( autore_1 == "false" )
	{
	document.all.CognomeNome1.focus();
	return( false );
	}
autore_2 = CheckStringa( autore_2 , 1 );
if( autore_2 == "false" )
	{
	document.all.CognomeNome2.focus();
	return( false );
	}
titolo = CheckStringa( titolo , 1 );
if( titolo == "false" )
	{
	document.all.Titolo.focus();
	return( false );
	}
soggetto = CheckStringa( soggetto , 1 );
if( soggetto == "false" )
	{
	document.all.Sogg.focus();
	return( false );
	}
localita = CheckStringa( localita , 1 );
if( localita == "false" )
	{
	document.all.Local.focus();
	return( false );
	}
secoloDa = CheckStringa( secoloDa , 2 );
if( secoloDa == "false" )
	{
	document.all.SecoloDa.focus();
	return( false );
	}
secoloA = CheckStringa( secoloA , 2 );
if( secoloA == "false" )
	{
	document.all.SecoloA.focus();
	return( false );
	}
pchiave = CheckStringa( pchiave , 1 );
if( pchiave == "false" )
	{
	document.all.PChiave.focus();
	return( false );
	}
first = true;
for( i = 0 ; i < document.all.Cod.length ; i++ )
    {   
    if( document.all.Cod[ i ].selected )
		{
		if( first )
			first = false;
		}
    }
second = true;
for( i = 0 ; i < document.all.Ere.length ; i++ )
    {   
    if( document.all.Ere[ i ].selected )
		{
		if( second )
			second = false;
		}
    }
comando += "CognomeNome1=" + autore_1;
comando += "&CognomeNome2=" + autore_2;
comando += "&Titolo=" + titolo;
comando += "&Cod=" + codice;
comando += "&Ere=" + ere;
comando += "&Soggetto=" + soggetto;
comando += "&Local=" + localita;
comando += "&SecoloDa=" + secoloDa;
comando += "&SecoloA=" + secoloA;
comando += "&PChiave=" + pchiave;

comando += "&TipoRicerca=" + document.all.TipoRicerca.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 ))
	{
	alert( "Controlla la sintassi della 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 == '\'' )
        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 );
	}
}

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


