// Search javascript file
// version 1.0.2 23/10/2007 Andrea Rincon Ray

// Workaround safari

var search_field = null;
var search_form = null;
var search_url = null;
var search_contextPath = null;

var search_delay = 800; //Ritardo in ms sulla ricerca

var search_max_results = 5;

var search_request_count = 1; // Token ricerca
var search_text = "";

var search_visible = false;

var search_default = "";

var search_requests = new Array();

var search_last_reply = 0;

var search_locale = "it";

//FV INIZIO SEARCH AJAX
var search_htmlFooter = "";

var search_allResults_text = "";

//FV FINE SEARCH AJAX


function initSearch( idCampo, idForm, wsURL, locale, contextPath, allResults_text) {
	
	//alert("initSearch START...");
	
	search_field = document.getElementById( idCampo );
	if ( search_field==null ) return;
	
	search_form = document.getElementById( idForm );
	if ( search_form==null ) return;
	
	search_url = wsURL;
	if ( search_url=="" ) return;
	
	search_locale = locale;
	if ( search_locale==null ) return;

	search_contextPath = contextPath;
	if ( search_contextPath==null ) return;

	search_default = search_field.value;
	search_field.onkeyup = searchFieldCallback;
	//search_field.onblur = hideSearch;
	search_field.onblur= function() {
		window.setTimeout( 'hideSearch();',	1000);
	}
	search_field.onclick = function() { if (search_field.value==search_default) search_field.value=""; }

	//FV INIZIO SEARCH AJAX
	search_allResults_text = allResults_text;
	
	search_htmlFooter = "<a id='allResult' href='javascript:submitSearch();'>";
	search_htmlFooter += "&raquo;&nbsp;" + search_allResults_text;
	search_htmlFooter += "</a>";
	search_htmlFooter += "<a id='close' href='javascript:hideSearch();'>";
	search_htmlFooter += "<img src='" + search_contextPath + "/docroot/erg/images/search/search-close.png' border='0' />";
	search_htmlFooter += "</a>";
	//FV FINE SEARCH AJAX

	//alert("initSearch END.");
	
}

addLoadEvent(injectSearchLayer);



function searchResultReset() {
	var container = document.getElementById("search_results");
	var figli = container.childNodes;
	
	while ( figli.length>0 ) {
		container.removeChild( figli[0] );
		figli = container.childNodes;
	}
	
	/*for ( var k=0; k<figli.length; k++ ) {
		
		container.removeChild( figli[k] );
		
	}*/

}




function injectSearchLayer() {
	
	var htmlOverlayer = "";
	//alert('6. fin qui arrivo, IE class repair');
	search_outer_div1 = document.createElement('div');
	search_outer_div1.setAttribute('id', 'search_outer_div'); 
	//search_outer_div1.style = 'display:none;';

	//htmlOverlayer += "<div id='search_outer_div' style='display:none;'>";
	
		//FV INIZIO SEARCH AJAX (COMMENTATO)
//		htmlOverlayer += "<div id='search_header' style='text-align:right;'>";
//		htmlOverlayer += "<a href='javascript:hideSearch();'><img src='" + search_contextPath + "/docroot/erg/images/search/search-close.png' border='0' /></a>";
//		htmlOverlayer += "</div>";
		//FV FINE SEARCH AJAX (COMMENTATO)

		//FV INIZIO SEARCH AJAX
		htmlOverlayer += "<div id='search_top'>";
		htmlOverlayer += "&nbsp;";
		htmlOverlayer += "</div>";
		//FV FINE SEARCH AJAX

		//FV INIZIO SEARCH AJAX
		htmlOverlayer += "<div id='search_background'>";
		//FV FINE SEARCH AJAX

		htmlOverlayer += "<div id='search_results'>";
		
		htmlOverlayer += "<div id='search_wait'>";
		htmlOverlayer += "<img src='" + search_contextPath + "/docroot/erg/images/search/no_result.gif' border='0' />";
		htmlOverlayer += "</div>";
		
		htmlOverlayer += "</div>";
		

		//FV INIZIO SEARCH AJAX (COMMENTATO)
//		htmlOverlayer += "<div id='search_footer'>";
//		htmlOverlayer += "<a href='javascript:submitSearch();'><img src='" + search_contextPath + "/docroot/erg/images/search/all_results.gif' border='0' /></a>";
//		htmlOverlayer += "</div>";
		//FV FINE SEARCH AJAX (COMMENTATO)

		//FV INIZIO SEARCH AJAX
		htmlOverlayer += "<div id='search_footer'>";
		htmlOverlayer += search_htmlFooter;
		htmlOverlayer += "</div>";
		//FV FINE SEARCH AJAX

		//FV INIZIO SEARCH AJAX (search_background)
		htmlOverlayer += "</div>";
		//FV FINE SEARCH AJAX (search_background)
		
		//FV INIZIO SEARCH AJAX
		htmlOverlayer += "<div id='search_bottom'>";
		htmlOverlayer += "&nbsp;";
		htmlOverlayer += "</div>";
		//FV FINE SEARCH AJAX
		
		
	//htmlOverlayer += "</div>";

	//document.body.insertAdjacentHTML( "beforeEnd", htmlOverlayer);
	search_outer_div1.innerHTML = htmlOverlayer;
	document.body.appendChild(search_outer_div1);
	divOverlayer = document.getElementById("search_outer_div");
	//document.getElementById("search_outer_div").style.top = '0px';
	//document.getElementById("search_outer_div").style.left = '0px';
	//alert('div --> ' + divOverlayer.innerHTML);
	
	//alert(document.getElementById("search_outer_div"));
	divOverlayer.style.display = "none";
	search_visible = false;
	
	searchResultReset();
	
}

function showSearch( testo ) {
	
	new_search_text = trim( testo );
	
	if ( new_search_text.length==0 ) {
		hideSearch() ;
		return;
	}
	
	if ( new_search_text == search_text ) return;
	search_text = new_search_text;
	
	
	search_request_count++;
	var query = new_search_text;
	//alert(query);
	var url = search_url + "?t=" + escape(search_request_count) + "&q=" + encodeURIComponent(query) + "&locale=" + escape(search_locale);
	//alert(url);
	var req = false;
    
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	
	if(req) {

		req.onreadystatechange = new Function ("processReqChangeSearch(" + search_requests.length + ");");
		req.open("GET", url, true);
		req.send(null);
		//alert(url);
		search_requests.push( req );
		
		//FV INIZIO SEARCH AJAX (COMMENTATO)
		//var dove = findPos( search_form );
		//FV FINE SEARCH AJAX (COMMENTATO)
		
		//FV INIZIO SEARCH AJAX
		var dove = findPos( search_field );
		//FV FINE SEARCH AJAX
		
		var divOverlayer = document.getElementById("search_outer_div");
		divOverlayer.style.display = "";
		// da rivedere aggiunto per posizionare il suggerimento 2/09/2009
		if (dove[0]==0) { dove[0]=972;};
		//fine modifica
		divOverlayer.style.left = dove[0] + "px";
		var tp = dove[1] + dove[3];
		// da rivedere aggiunto per posizionare il suggerimento 2/09/2009
		if (tp==0) { tp=81;};
				//fine modifica
		divOverlayer.style.top = tp + "px";
	
		search_visible = true;
		

	}
	
}

function submitSearch() {
	search_form.submit();
	hideSearch();
}


function processReqChangeSearch( ind ) {
	
	//alert("processReqChangeSearch START...");

	var req = search_requests[ind];
	
	if ( req==null ) return;
	
	if (req.readyState == 4) {

		var responseText=req.responseText;
		//alert("responseText [" + responseText + "]");

		// only if "OK"
		if (req.status == 200) {
            
			//valutiamo il dom, con il risultato
			//var token = req.responseXML.getElementsByTagName("token");
			var divToken = "<div id=\"tokenSearch\">";
			if(responseText != null && responseText.indexOf(divToken) >= 0)
			{
				var token = responseText.substr(responseText.indexOf(divToken) + divToken.length);
				token = token.substr(0,token.indexOf("</div>"));
				token = trim(token);
				
				//alert("token [" + token + "]");
				
//				if (token.length==0 || Number(token[0].textContent) <=search_last_reply ) return;
//				search_last_reply = Number(token[0].textContent);

				if (token.length==0 || Number(token) <=search_last_reply ) return;
				search_last_reply = Number(token);
			}

			

			var content_list = "";
			var xmlResponseToParse = "";
			
			if(responseText != null && responseText.indexOf("content-list") >= 0)
			{
				content_list = responseText.substr(responseText.indexOf("content-list"));

				content_list = content_list.substr(0,content_list.indexOf("</ul>"));
				
				content_list = "<ul class=\"" + content_list + "</ul>";
				
				//var xmlResponseToParse = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"; 
				
				xmlResponseToParse += content_list;

				
			}

			var responseDiv = document.createElement('div');
			responseDiv.innerHTML = xmlResponseToParse;
			
			
			//alert("xmlResponseToParse [" + xmlResponseToParse + "]")
			//alert("responseDiv [" + responseDiv.innerHTML + "]")

			//var risultati = req.responseXML.getElementsByTagName("result");

			risultati = responseDiv.getElementsByTagName("li");
			
			//alert("risultati [" + risultati + "]")

			//alert("responseDiv [" + responseDiv.innerHTML + "]");

			//alert("risultati.length [" + risultati.length + "]");


			searchResultReset(); // vuotiamo i risultati
			
			for ( var i = 0; i<risultati.length && i<search_max_results; i++ ) {
//				var tit = risultati[i].getElementsByTagName("title");
//				var desc = risultati[i].getElementsByTagName("abstract");
//				var lnk = risultati[i].getElementsByTagName("link");

				var aTag = risultati[i].getElementsByTagName("a");

				var tit = null;
				var lnk = null;
				
				if (aTag.length>0 && aTag[0]!=null) {
					if (aTag[0].getAttribute('href') !=null) {
						
						//alert("aTag[0].getAttribute('href') [" + aTag[0].getAttribute('href') + "]");
						lnk = aTag[0].getAttribute('href');
					}

					if (aTag[0].innerHTML !=null) {
						//alert("aTag[0].innerHTML [" + aTag[0].innerHTML + "]");
						tit = aTag[0].innerHTML;
					}
				}else{
					if (risultati[i].innerHTML!=null) {

						//alert("risultati[i].innerHTML [" + risultati[i].innerHTML + "]");
						tit = risultati[i].innerHTML;

						if(tit.indexOf("<em>") >= 0)
						{
							tit = tit.substr(0,tit.indexOf("<em>"));
							tit = trim(tit);
						}
						
						if(tit.indexOf("<EM>") >= 0)
						{
							tit = tit.substr(0,tit.indexOf("<EM>"));
							tit = trim(tit);
						}
					}
				}

				
				//alert("risultati[i].getElementsByTagName(\"em\") [" + risultati[i].getElementsByTagName("em") + "]");

				var desc = risultati[i].getElementsByTagName("em");
				//alert("desc.length [" + desc.length + "]");

				//alert('lunghezza tit ' + tit.length + ' lunghezza desc ' + desc.length + ' lunghezza lnk ' + lnk.length);
					
				if (tit==null || trim(tit).length==0) {
					tit = 'No Title';
				}
				
				//if (desc.length>0 && desc[0]!=null && desc[0].firstChild!=null) {
				if (desc.length>0 && desc[0]!=null && desc[0].innerHTML != null && trim(desc[0].innerHTML).length>0) {
					//alert("desc[0].innerHTML [" + desc[0].innerHTML + "]");
					desc = desc[0].innerHTML;
				} else {
					desc = "";
				}

				//desc = tit;

				if (lnk==null) {
					lnk = "#";
				}

				//alert("tit [" + tit + "]");
				//alert("desc [" + desc + "]");
				//alert("lnk [" + lnk + "]");

				//inserimento
				/*var codice = "<div id='risultato_"+i+"' class='search_result'>";
				codice += "<a class='title'>" + tit + "</a>";
				codice += "<a class='abstract' style='font-weight:normal;'>" + desc + "</a>";
				codice += "</div>";*/
				codice = document.createElement('div');
				codice.setAttribute('id', 'risultato_'+i+'');
				codice.setAttribute('class', 'search_result');
				codiceHref1 = document.createElement('a');
				codiceHref1.setAttribute('id', 'href1_'+i+'');
				codiceHref1.setAttribute('class', 'title');
				codiceHref1.innerHTML = tit;
				codiceHref2 = document.createElement('a');
				codiceHref2.setAttribute('id', 'href2_'+i+'');
				codiceHref2.setAttribute('class', 'abstract');
				codiceHref2.innerHTML = desc;
				codice.appendChild(codiceHref1);
				codice.appendChild(codiceHref2);

				// inserimento 
				var container = document.getElementById("search_results");
				//container.insertAdjacentHTML( "beforeEnd", codice);
				container.appendChild(codice);

				document.getElementById('href2_'+i+'').style.fontWeight = 'normal';

				//Internet Explorer fa i capricci con il settaggio setAttribute della classe perciņ facciamo in questo modo
				if(navigator.appName == 'Microsoft Internet Explorer'){
					document.getElementById('risultato_'+i+'').className = 'search_result';
					document.getElementById('href1_'+i+'').className = 'title';
					document.getElementById('href2_'+i+'').className = 'abstract';
				}

				var rigaRisultato = document.getElementById("risultato_"+i);
				//alert(lnk);
				if(lnk.lastIndexOf('.pdf')!=-1 ||
				   lnk.lastIndexOf('.ppt')!=-1 ||
				   lnk.lastIndexOf('.xsl')!=-1 ||
				   lnk.lastIndexOf('.doc')!=-1){
//						// 25/08/08: aggiunta protocollo e dominio solo se trattasi di URL relativo
//						if (lnk.substr(0,1) == '/') {
//							//alert(lnk);
//							if (location.href.lastIndexOf('ENI_en_IT/') != -1){
//								var firstpos = location.href.lastIndexOf('ENI_en_IT/');
//								//alert(lnk);
//							}else{
//								var firstpos = location.href.lastIndexOf('en_IT/');
//								//alert(lnk);
//							}
//							var lastpos = location.href.length;//alert(lastpos);
//							var Namer = location.href.substr(0,firstpos);//alert(Namer);
//							Namer += lnk; lnk = Namer;//alert(lnk);
//						}
					//rigaRisultato.onmousedown = new Function( "window.open('"+lnk+"',null,'');" );
					rigaRisultato.onclick = new Function( "window.open('"+lnk+"',null,'');" );
				}else{
					rigaRisultato.onclick = new Function( "window.location='" + lnk + "';" );
					rigaRisultato.onmousedown = new Function( "window.location='" + lnk + "';" );
				}
				
				//rigaRisultato.onclick = new Function( "alert('" + lnk + "');" );
				
				rigaRisultato.onmouseover = new Function( "searchRollover('risultato_"+i+"');" );
				rigaRisultato.onmouseout = new Function( "searchRollout('risultato_"+i+"');" );
					
			}

			if ( risultati.length==0 ) {
				searchResultReset();
				var newHTML = "";
				/*newHTML += "<div id='search_wait'>";
				newHTML += "<img src='" + search_contextPath + "/docroot/erg/images/search/no_result.gif' border='0' />";
				newHTML += "</div>";*/

				newHTML = document.createElement('div');
				newHTML.setAttribute('id', 'search_wait');
				newHTMLimg = document.createElement('img');
				newHTMLimg.setAttribute('src', search_contextPath + '/docroot/erg/images/search/no_result.gif');
				newHTMLimg.setAttribute('border', '0');
				newHTML.appendChild(newHTMLimg);

				document.getElementById("search_footer").innerHTML = " ";
				var container = document.getElementById("search_results");
				//container.insertAdjacentHTML( "beforeEnd", newHTML );
				container.appendChild(newHTML);
			}else{
				
				
				//FV INIZIO SEARCH AJAX (COMMENTATO)
				//document.getElementById("search_footer").innerHTML = "<a href='javascript:submitSearch();'><img src='" + search_contextPath + "/docroot/erg/images/search/all_results.gif' border='0' /></a>";
				//FV FINE SEARCH AJAX (COMMENTATO)
				
				//FV INIZIO SEARCH AJAX
				document.getElementById("search_footer").innerHTML = search_htmlFooter;
				//FV FINE SEARCH AJAX
				
			}
			
		} else {
			//alert("There was a problem retrieving the XML data:\n" + req.statusText);
			searchResultReset();
			/*var newHTML = "";
			newHTML += "<div id='search_wait'>";
			newHTML += "<img src='" + search_contextPath + "/docroot/erg/images/search/error.gif' border='0' />";
			newHTML += "</div>";*/
			
			newHTML = document.createElement('div');
			newHTML.setAttribute('id', 'search_wait');
			newHTMLimg = document.createElement('img');
			newHTMLimg.setAttribute('src', search_contextPath + '/docroot/erg/images/search/error.gif');
			newHTMLimg.setAttribute('border', '0');
			newHTML.appendChild(newHTMLimg);
	
			var container = document.getElementById("search_results");
			//container.insertAdjacentHTML( "beforeEnd", newHTML );
			container.appendChild(newHTML);
		}
	}
}

function searchRollover( elemento ) {
	var container = document.getElementById(elemento);
	if (container==null) return;
	
	//container.style.backgroundColor="#AAAAAA";
	
	container.style.cursor="pointer";
}

function searchRollout( elemento ) {
	var container = document.getElementById(elemento);
	if (container==null) return;
	
	//container.style.backgroundColor="";
	
	container.style.cursor="default";

}


function hideSearch() {
	
	if ( search_visible==false ) return;
	
	//Nascondiamo capo search
	search_visible = false;
	var divOverlayer = document.getElementById("search_outer_div");
	
	
	// Resettiamo
	searchResultReset();
	
			//reinseriamo
	/*var newHTML = "";
	newHTML += "<div id='search_wait'>";
	newHTML += "<img src='" + search_contextPath + "/docroot/erg/images/search/searching.gif' border='0' />";
	newHTML += "</div>";*/

	newHTML = document.createElement('div');
	newHTML.setAttribute('id', 'search_wait');
	newHTMLimg = document.createElement('img');
	newHTMLimg.setAttribute('src', search_contextPath + '/docroot/erg/images/search/searching.gif');
	newHTMLimg.setAttribute('border', '0');
	newHTML.appendChild(newHTMLimg);
	
	var container = document.getElementById("search_results");
	//container.insertAdjacentHTML( "beforeEnd", newHTML );
	container.appendChild(newHTML);
		
	divOverlayer.style.display = "none";
	
	search_text = "";
	
}



function searchFieldCallback() {
	
	var query = search_field.value;
	// se ultima lettera č != da " " settiamo il timeout, altrimenti inviamo subito la ricerca
	var lastchar = query.substr( query.length-1 ,1);
	if ( lastchar!==" ") {
		window.setTimeout( 'searchTimeoutHandler(\"'+ query +'\")',	search_delay);
	} else {
		showSearch( query );
	}
	
}

function searchTimeoutHandler( testo ) {
	
	//valutiamo se il campo č mutato. nel caso non lo sia portiamo avanti
	var query = search_field.value;
	if ( testo!=query ) return;
	showSearch( testo );
	
}









// --------------------------------------------------------------------| Compatibility patch e utility

function Browser() {

	var ua, s, i;

	this.isIE    = false;
	this.isNS    = false;
	this.version = null;

	ua = navigator.userAgent;

	s = "MSIE";
	if ((i = ua.indexOf(s)) >= 0) {
    	this.isIE = true;
    	this.version = parseFloat(ua.substr(i + s.length));
    	return;
	}

	s = "Netscape6/";
	if ((i = ua.indexOf(s)) >= 0) {
    	this.isNS = true;
    	this.version = parseFloat(ua.substr(i + s.length));
    	return;
  	}

  	// Treat any other "Gecko" browser as NS 6.1.

  	s = "Gecko";
  	if ((i = ua.indexOf(s)) >= 0) {
    	this.isNS = true;
    	this.version = 6.1;
    	return;
  	}
}

var browser = new Browser();

function findPos(obj) {
	
	var mw = mh = 0;
	mw = obj.offsetWidth;
	mh = obj.offsetHeight;
	
	var curleft = curtop = 0;

	//FV INIZIO SEARCH AJAX (COMMENTATO)
//	if (obj.offsetParent) {
//		curleft = obj.offsetLeft
//		curtop = obj.offsetTop
//		while (obj = obj.offsetParent) {
//			curleft += obj.offsetLeft
//			curtop += obj.offsetTop
//		}
//	}
	//FV FINE SEARCH AJAX (COMMENTATO)

	//FV INIZIO SEARCH AJAX
	curleft = $("#" + obj.id).offset().left;
	curtop = $("#" + obj.id).offset().top;
	//FV FINE SEARCH AJAX
	
	
	return [curleft,curtop,mw,mh];
}

function addResizedEvent(func) {	
	var oldonload = window.onresize;
	if (typeof window.onresize != 'function') {
    	window.onresize = func;
	} else {
		window.onresize = function(){
		oldonload();
		func();
		}
	}
}

addResizedEvent(hideSearch);

function trim(s) {
	var l=0; var r=s.length -1;
	while(l < s.length && s[l] == ' ')
	{	l++; }
	while(r > l && s[r] == ' ')
	{	r-=1;	}
	return s.substring(l, r+1);
}

function addLoadEvent(func) {	
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
    	window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

if (navigator.vendor == "Apple Computer, Inc." || navigator.vendor == "KDE") { 

	function Document() {}
	function Event() {}
	function HTMLCollection() {}
	function HTMLElement() {}
	function Node() {}
	Document.prototype = window["[[DOMDocument]]"];
	Event.prototype = window["[[DOMEvent]]"];
	HTMLCollection.prototype = window["[[HTMLCollection.prototype]]"];
	HTMLElement.prototype = window["[[DOMElement.prototype]]"];
	Node.prototype = window["[[DOMNode.prototype]]"];
	
}

//Workaround per l'inserimento dinamico di elementi in firefox
if( typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement ) {
	HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode) { 
		switch (where){
		case 'beforeBegin':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'afterBegin':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'beforeEnd':
			this.appendChild(parsedNode);
			break;
		case 'afterEnd':
			if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	}

	HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr) {
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	}


	HTMLElement.prototype.insertAdjacentText = function (where,txtStr) {
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}
}

