// 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_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 = "en_IT";


function initSearch( idCampo, idForm, wsURL, locale ) {
	
	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_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=""; }
	
}

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;'>";
	
		htmlOverlayer += "<div id='search_header' style='text-align:right;'>";
		htmlOverlayer += "<a href='javascript:hideSearch();'><img src='/" + search_locale + "/static/images/search/close.gif' border='0' /></a>";
		htmlOverlayer += "</div>";
		
		htmlOverlayer += "<div id='search_results'>";
		
		htmlOverlayer += "<div id='search_wait'>";
		htmlOverlayer += "<img src='/" + search_locale + "/static/images/search/no_result.gif' border='0' />";
		htmlOverlayer += "</div>";
		
		htmlOverlayer += "</div>";
		
		htmlOverlayer += "<div id='search_footer'>";
		htmlOverlayer += "<a href='javascript:submitSearch();'><img src='/" + search_locale + "/static/images/search/all_results.gif' border='0' /></a>";
		htmlOverlayer += "</div>";
	
	//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);

	  var elem_div= document.getElementsByTagName("div");
 	for ( var j=0; j<elem_div.length; j++ ) {
 	 if (elem_div[j].id =="search_outer_div")
 	 	elem_div[j].style.display = "none";
  	 	
 	}
		//for chiara
		// for( var i=0; i <= divOverlayer.length; i++){
			// alert("prova");
		
	//	divOverlayer[i].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 );
		
		var dove = findPos( search_form );
		
		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=50;};
				//fine modifica
		divOverlayer.style.top = tp + "px";
	
		search_visible = true;
		

	}
	
}

function submitSearch() {
	search_form.submit();
	hideSearch();
}


function processReqChangeSearch( ind ) {
	
	var req = search_requests[ind];
	
	if ( req==null ) return;
	
	if (req.readyState == 4) {
		// only if "OK"
		if (req.status == 200) {
            
			//valutiamo il dom, con il risultato
			var token = req.responseXML.getElementsByTagName("token");
			
			if (token.length==0 || Number(token[0].textContent) <=search_last_reply ) return;
			
			search_last_reply = Number(token[0].textContent);
			
			var risultati = req.responseXML.getElementsByTagName("result");
			
			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");
				//alert('lunghezza tit ' + tit.length + ' lunghezza desc ' + desc.length + ' lunghezza lnk ' + lnk.length);
				if ( tit.length>0 && desc.length>0 && lnk.length>0 ) {
					
					if (tit[0]!=null && tit[0].firstChild!=null) {
						tit = tit[0].firstChild.nodeValue;
					}else{
						tit = 'Senza Titolo';
					}
					
					if (desc[0]!=null && desc[0].firstChild!=null) {
						desc = desc[0].firstChild.nodeValue;
					} else {
						desc = tit;
					}
					
					if (lnk[0]!=null && lnk[0].firstChild!=null) {
						lnk = lnk[0].firstChild.nodeValue;
					} else {
						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_locale + "/static/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', '/en_IT/static/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{
				document.getElementById("search_footer").innerHTML = "<a href='javascript:submitSearch();'><img src='/" + search_locale + "/static/images/search/all_results.gif' border='0' /></a>";
			}
			
		} 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_locale + "/static/images/search/error.gif' border='0' />";
			newHTML += "</div>";*/
			
			newHTML = document.createElement('div');
			newHTML.setAttribute('id', 'search_wait');
			newHTMLimg = document.createElement('img');
			newHTMLimg.setAttribute('src', '/en_IT/static/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";
}

function searchRollout( elemento ) {
	var container = document.getElementById(elemento);
	if (container==null) return;
	container.style.backgroundColor="";
}


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_locale + "/static/images/search/searching.gif' border='0' />";
	newHTML += "</div>";*/

	newHTML = document.createElement('div');
	newHTML.setAttribute('id', 'search_wait');
	newHTMLimg = document.createElement('img');
	newHTMLimg.setAttribute('src', '/en_IT/static/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;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	
	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)
	}
}
