// 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 = "it_IT";

////initSearch( "to", "toId", "messageForm", "/oilportal/tooltips/search/people.do");
function initSearch( idCampo, idCampoSet, idForm, wsURL ) {

	search_field = document.getElementById( idCampo );
	if ( search_field==null ) return;

	search_field_to_set = document.getElementById( idCampoSet );
	if ( search_field_to_set==null ) return;

	search_form = document.getElementById( idForm );
	if ( search_form==null ) return;

	search_url = wsURL;
	if ( search_url=="" ) return;

	search_form.setAttribute('autocomplete', 'off');
	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() {

	//alert("searchResultReset");

	var container = document.getElementById("search_results");

	var figli = container.childNodes;

	

	while ( figli.length>0 ) {

		container.removeChild( figli[0] );

		figli = container.childNodes;

	}

}





function injectSearchLayer() {

	var htmlOverlayer = "";

	search_outer_div1 = document.createElement('div');

	search_outer_div1.setAttribute('id', 'search_outer_div'); 

		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 class='search_footer'>";

			htmlOverlayer += "<img src='/" + search_locale + "/static/images/search/footer.gif' border='0' />";

		htmlOverlayer += "</div>";
	//alert("htmlOverlayer ="+htmlOverlayer);

	search_outer_div1.innerHTML = htmlOverlayer;

	document.body.appendChild(search_outer_div1);

	divOverlayer = 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;
	var url = search_url + "?token=" + escape(search_request_count) + "&keyword=" + encodeURIComponent(query);
	//alert("showSearch url richiesta="+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) {
		//alert("showSearch req ="+req);
		req.onreadystatechange = new Function ("processReqChangeSearch(" + search_requests.length + ");");
		req.open("GET", url, true);
		req.send(null);
		search_requests.push( req );
		
		var dove = findPos( search_field );
		var divOverlayer = document.getElementById("search_outer_div");
		divOverlayer.style.display = "";
		divOverlayer.style.position = "absolute";
		divOverlayer.style.paddingLeft = "5px";
		divOverlayer.style.left = dove[0] - 5 + "px";
		var tp = dove[1] + dove[3] - 5;
		divOverlayer.style.top = tp + "px";
		search_visible = true;
	}
}



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
			var inputValue = document.getElementById('to').value;

			for ( var i = 0; i<risultati.length && i<search_max_results; i++ ) {

				//alert("Risultato "+i+" ="+risultati[i].innerHTML);

				var userid = risultati[i].getElementsByTagName("userid");

				var name = risultati[i].getElementsByTagName("name");

				var surname = risultati[i].getElementsByTagName("surname");

				//alert('lunghezza tit ' + tit.length + ' lunghezza desc ' + desc.length + ' lunghezza lnk ' + lnk.length);

				if ( userid.length>0 && name.length>0 && surname.length>0 ) {

					if (userid[0]!=null && userid[0].firstChild!=null) {

						userid = userid[0].firstChild.nodeValue;

					}else{

						userid = 'No Userid';

					}

					if (name[0]!=null && name[0].firstChild!=null) {

						name = name[0].firstChild.nodeValue;var control = false;var newName = '';

						if(name.toString().toLowerCase().indexOf(inputValue.toString().toLowerCase())!=-1){
							var nameArrey = new Array();var inputArrey = new Array();

							for(u=0;u<inputValue.toString().length;u++){
								inputArrey.push(inputValue.charAt(u).toString());
							}u=0;		

							for(u=0;u<name.length;u++){
								if(inputArrey[u] && name.charAt(u).toString().toLowerCase() == inputArrey[u].toString().toLowerCase()){
									var ia = (inputArrey[u+1])? inputArrey[u+1].toString().toLowerCase():null;
									var ia1 = (inputArrey[u+2])? inputArrey[u+2].toString().toLowerCase():null;
									var sa = (name.charAt(u+1))? name.charAt(u+1).toString().toLowerCase():null;
									var sa1 = (name.charAt(u+2))? name.charAt(u+2).toString().toLowerCase():null;
									if(!ia || !ia1 ||(ia == sa && ia1 == sa1)){
										nameArrey[u] = '<b>'+name.charAt(u).toString()+'</b>';
									}else if(ia != sa || ia1 != sa1){inputArrey.unshift('#');nameArrey.push(name.charAt(u));}
								}else{inputArrey.unshift('#');nameArrey.push(name.charAt(u));}
							}u=0;
						}
						
						if(nameArrey){
							for(u=0;u<nameArrey.length;u++){
								newName += nameArrey[u];
							}u=0;
						}else{newName = name;}
				
					} else {

						var newName = 'No Name';

					}

					if (surname[0]!=null && surname[0].firstChild!=null) {

						surname = surname[0].firstChild.nodeValue; control = false;	var newSname = '';			

						if(surname.toString().toLowerCase().indexOf(inputValue.toString().toLowerCase())!=-1){
							var snameArrey = new Array();var inputArrey = new Array();

							for(u=0;u<inputValue.toString().length;u++){
								inputArrey.push(inputValue.charAt(u).toString());
							}u=0;

							for(u=0;u<surname.length;u++){
								if(inputArrey[u] && surname.charAt(u).toString().toLowerCase() == inputArrey[u].toString().toLowerCase()){
									var ia = (inputArrey[u+1])? inputArrey[u+1].toString().toLowerCase():null;
									var sa = (surname.charAt(u+1))? surname.charAt(u+1).toString().toLowerCase():null;
									var ia1 = (inputArrey[u+2])? inputArrey[u+2].toString().toLowerCase():null;
									var sa1 = (surname.charAt(u+2))? surname.charAt(u+2).toString().toLowerCase():null;
									if(!ia || !ia1 ||(ia == sa && ia1 == sa1)){
										snameArrey[u] = '<b>'+surname.charAt(u).toString()+'</b>';
									}else if(ia != sa || ia1 != sa1){inputArrey.unshift('#');snameArrey.push(surname.charAt(u));}
								}else{inputArrey.unshift('#');snameArrey.push(surname.charAt(u));}
							}u=0;
							
						}
						
						if(snameArrey){
							for(u=0;u<snameArrey.length;u++){
								newSname += snameArrey[u];
							}u=0;
						}else{newSname = surname;}

					} else {

						var newSname = "No Surname";

					}
					//alert('name='+newName+' surname='+newSname);
					//inserimento

					codice = document.createElement('div');

					codice.setAttribute('id', 'risultato_'+i+'');

					codice.setAttribute('class', 'search_result');

						codiceNome1 = document.createElement('a');

						codiceNome1.setAttribute('id', 'nome'+i+'');

						codiceNome1.setAttribute('class', 'nome');

						codiceNome1.setAttribute('onclick', 'javascript:setSearchValues("'+name+'","'+surname+'","'+userid+'");');
						
						codiceNome1.setAttribute('name', name+','+surname+','+userid);

						codiceNome1.innerHTML = newName+" "+newSname;

					codice.appendChild(codiceNome1);

					// inserimento 

					var container = document.getElementById("search_results");
					container.appendChild(codice);

					//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('nome'+i+'').className = 'nome';
					}

					var rigaRisultato = document.getElementById("risultato_"+i);

					rigaRisultato.onmouseover = new Function( "searchRollover('risultato_"+i+"');" );

					rigaRisultato.onmouseout = new Function( "searchRollout('risultato_"+i+"');" );

				}

			}



			if ( risultati.length==0 ) {

				searchResultReset();

				var newHTML = "";

				newHTML = document.createElement('div');


				newHTML.setAttribute('id', 'search_wait');

				newHTMLimg = document.createElement('img');

				newHTMLimg.setAttribute('src', '/it_IT/static/images/search/no_result.gif');

				newHTMLimg.setAttribute('border', '0');

				newHTML.appendChild(newHTMLimg);

				var container = document.getElementById("search_results");

				container.appendChild(newHTML);

			}

			

		} else {

			//alert("There was a problem retrieving the XML data:\n" + req.statusText);

			searchResultReset();

			

			newHTML = document.createElement('div');

			newHTML.setAttribute('id', 'search_wait');

			newHTMLimg = document.createElement('img');

			newHTMLimg.setAttribute('src', '/it_IT/static/images/search/error.gif');

			newHTMLimg.setAttribute('border', '0');

			newHTML.appendChild(newHTMLimg);

	

			var container = document.getElementById("search_results");

			container.appendChild(newHTML);

		}

	}

}



function searchRollover( elemento ) {

	var container = document.getElementById(elemento);

	if (container==null) return;
	
	container.style.backgroundColor="#CCC !important";

}



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

	//alert("searchResultReset in hideSearch");

	searchResultReset();

	

	//reinseriamo

	newHTML = document.createElement('div');

	newHTML.setAttribute('id', 'search_wait');

	newHTMLimg = document.createElement('img');

	newHTMLimg.setAttribute('src', '/it_IT/static/images/search/searching.gif');

	newHTMLimg.setAttribute('border', '0');

	newHTML.appendChild(newHTMLimg);

	

	//alert("newHTML ="+newHTML);

	

	var container = document.getElementById("search_results");

	container.appendChild(newHTML);

		

	divOverlayer.style.display = "none";

	

	search_text = "";

	

}



function searchFieldCallback() {

	//alert("searchFieldCallback");
	var query = search_field.value;
	//alert(query);
	// 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 );
}



function setSearchValues(nome,cognome,toid) {

	search_field.value=nome+" "+cognome; 

	search_field_to_set.value=toid;

	hideSearch();

}













// --------------------------------------------------------------------| 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();

		}

	}

}

var precKey = false; 
var firstPass = true;
var nId = '';
document.onkeydown = keyDown

function keyDown(e) {
	if(document.all){
		var key=event.keyCode;
		var realKey = String.fromCharCode(event.keyCode);
	}else{
		var key = e.which;
		var realKey = String.fromCharCode(e.which);
	}
	selectWord(key);
}

function selectWord(key){
	if(key != '38' && key != '40' && key != '13'){
		precKey = false;
		firstPass = true;
	}
	var exist = (document.getElementById('risultato_0'))? document.getElementById('risultato_0'):null;
	precKey = (precKey)? precKey:exist;
	if(precKey){
		var reduce = precKey.id.substr(10,1);
		//alert('reduce = '+reduce);
		var rKey = 'risultato_' + (parseInt(reduce)-1);
		//alert('rKey = '+rKey);
		var aKey = 'risultato_' + (parseInt(reduce)+1);
		//alert('aKey = '+aKey);
	}
	if(key == '38' && exist && reduce>0){
		//alert('entro nel reduce con key='+key+',exist='+exist+'e reduce='+reduce);
		if(rKey){nId = rKey.substr(10,1);}
		if(document.getElementById(rKey)){
			var nElement = document.getElementById(rKey);
			//alert(nId);
			precKey.style.backgroundColor = '';
			nElement.style.backgroundColor = '#999';
			precKey = nElement;
		}
	}
	if(key == '40' && exist && reduce<4){
		if(firstPass){var aKey = 'risultato_0';firstPass = false;}
		//alert('entro nel adding con key='+aKey+',exist='+exist+'e firstpass='+firstPass);
		if(aKey){nId = aKey.substr(10,1);}
		if(document.getElementById(aKey)){
			var nElement = document.getElementById(aKey);
			//alert(nId);
			precKey.style.backgroundColor = '';
			nElement.style.backgroundColor = '#999';
			precKey = nElement;
		}
	}
	if(key == '13'){
		//document.messageForm.onsubmit = new Function( "if(!submitControl()) return false;" );
		var hrefId = 'nome' + nId;
		if(document.getElementById(hrefId)){
			var testo = document.getElementById(hrefId).name.split(',');
			//setSearchValues(nome,cognome,toid)
			window.setTimeout('setSearchValues("'+testo[0]+'","'+testo[1]+'","'+testo[2]+'")', 100);
			precKey = false; firstPass = true;
		}else{return false;}
	}
}

/*function submitControl(){
	var objects = document.messageForm.elements.length;
	var cArrey1 = new Array();
	for(z=0;z<=objects;z++){
		var obj = (document.messageForm.elements[z])? document.messageForm.elements[z]:((document.messageForm.elements[z-1]))? document.messageForm.elements[z-1]:null;
		if(obj.value){cArrey1.push('true');}else{cArrey1.push('false');}
	}
	if(cArrey1.toString().indexOf('false')!=-1){
		return false;
	}else{document.messageForm.submit();}
}*/

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)

	}

}


