﻿var contentSearch= new Array("content:Pagine");

//var sRootPath='/it/';
$(document).ready(function(){
		if ($('#risultati_ricerca').is('div')){
		var stext=GetUrlParam('searchText');
		var mode=GetUrlParam('mode');

			if(stext!=''){
				var arrayWord=ritornaWordSearch(stext,mode);

				searchPage(arrayWord,stext);
			}
		}
});



/*
function invia(){
  var a=document.getElementById("search_form");
	if(a.searchText.value!='' && a.searchText.value!='Cerca'){
	  a.submit();
	  return true;
  }else{
	  alert("Inserire una parola da ricercare!")
	    return false;
  }
}*/



function ritornaWordSearch(wordname,mode){

	wordname = wordname.replace(/[+]+/g,' ');
	var wordtrim=wordname.replace(/[\s]+/g,'').toLowerCase();


	if(wordtrim.indexOf("tag:")>=0|| wordtrim.indexOf("tags:")>=0||mode=='tags' || wordtrim.indexOf("news:")>=0||mode=='events' || wordtrim.indexOf("news:")>=0||mode=='events' || wordtrim.indexOf("page:")>=0 ){
		 var f=0;
		contentSearch= new Array();
		if((wordtrim.indexOf("tag:")>=0|| wordtrim.indexOf("tags:")>=0||mode=='tags')){
			contentSearch[f]="tags:TAGS";
			wordname=wordname.replace("tags:","");
			wordname=wordname.replace("tag:","");
			f++;
		}

		if(wordtrim.indexOf("news:")>=0||mode=='news'){
			contentSearch[f]="news:NEWS";
			wordname=wordname.replace("news:","");
			f++;
		}
	if(wordtrim.indexOf("page:")>=0 || mode=='all'){
			contentSearch[f]="content:Pagine";
			wordname=wordname.replace("page:","");
			f++;
		}
	if(wordtrim.indexOf("events:")>=0 || mode=='all'){
			contentSearch[f]="eventi:Eventi";
			wordname=wordname.replace("eventi:","");
			f++;
		}
	}

	var testString = wordname;
	testString = testString.replace( /^\s+|\s+$/g ,'').replace( /\s+/g,' ');
	var arr = testString.split(' ');
	var arrnew=new Array();
	var c=0;
	for(i=0;i<arr.length;i++) {
		//alert(arr[i]);
	var word=arr[i];
		if (word.length>2) {
			word = word.toUpperCase();
			if (!stopword(word)) {
			arrnew.push(wordRootIT(word));
			}
	  	}
	  }
	  	return arrnew;
	}



 // Elimina
	function stopword (word) {
	      var stopWord= new Array(
	      					   "GLI","DEL","DAI","DAL","NEL","NEI","SUL","SUI","SULLA","SULLE","SUGLI","NEGLI","DALLE","DEI","UNO","UNA",
	                           "NELLO","NELLA","NELLE","DEGLI","DELLE","DALLO","DALLA","DAGLI","DELLA","ALLO","AGLI","ALLA",
	                           "ALLE","TRA","FRA","PER","COI","CON","CHI","CHE","DELL","DALL"
	                           );

	      for (j=0;j<stopWord.length;j++){
	          if (stopWord[j]==word){
		           return true;
		           }
		      }
	      return false;
	  }

  function  wordRootIT ( word) {
	      if (word.endsWith("HI") || word.endsWith("HE")) {
	          word = word.substring(0,word.length-2);
	      }
	      if (word.endsWith("A") || word.endsWith("E") ||
	          word.endsWith("I") || word.endsWith("O") ||
	          word.endsWith("U")) {
	          word = word.substring(0,word.length-1);
	      }
	      word=word + "_";
	      return word;
	  }


function searchPage(arrayWord,textoriginal){

	var z=0;
	var pageArray = new Array();
	var html='';
	var htmlheader='';
 	var y=0;

 	var risultati 		= new Array();
	var contents 		= new Array();
	var contentLabels 	= new Array();

	//popola l'array con le pagine
  $.ajax({
       type: "GET",
       url: sRootPath+"search/search.xml",
       dataType: 'xml',
       async:false,
       success: function(msg){
		 	$(msg).find("page").each(function(){
				 		var idpage = $(this).attr('id');
				 		var linkpage=	$(this).attr('htmlpath');
				 	/*	if(linkpage=='/it/XML/NEWS/data.xml'){
				 			linkpage='/it/media_center/news/newsDetail.html?IDNEWS='+$(this).attr('idxml');
				 		}else if(linkpage=='/it/XML/EVENTI/data.xml'){
				 			linkpage='/it/cosa_facciamo/eventi/eventiDetail.html?IDEVENTO='+$(this).attr('idxml');
				 		}*/


				 		var namepage=	$(this).attr('nomepagina');
				 		var count=0;
						pageArray[idpage] = new pageReferences(namepage,linkpage,idpage);
					});
				}
    });
    $(".headings").append("&quot;"+textoriginal+"&quot;");
      var k=0;

      for(var i=0;i<contentSearch.length;i++){
										contents[i]	= contentSearch[i].split(":")[0]+'';
										contentLabels[i] = contentSearch[i].split(":")[1]+'';
									//	alert(contentLabels[i]);
										// istanzia l'array per il tipo di contenuto
										risultati[contents[i]+''] = new Array();
										//alert("istanziato array risultati["+contents[i]+"]");
									}
    	for(var i=0;i<arrayWord.length;i++){
    			k=i;
    			var VOCABOLO=arrayWord[i].charAt(0);
    			if (!isNaN(VOCABOLO)){
    				VOCABOLO="A";
    				}
    		$.ajax({
			       type: "GET",
			       url: sRootPath+"search/"+VOCABOLO+"-searchindex.xml",
			       dataType: 'xml',
			       async:false,
			       success:function(msg){
			       	var keyselected=arrayWord[k]



									$(msg).find("Key").filter("[key="+keyselected+"]").filter("[lang="+langXml+"]").each(function(){

						 				var id 			= $(this).attr('id');
								 		var n			=$(this).attr('n');
								 		var text		=$(this).attr('text');
								 		var count		= 0;
								 		var newtxt		= "";
								 		var keycontent 	= ""+$(this).attr('content');

													// inserisci i risultati solo se prensenti nei tipi di contenuto
													//alert("cerco se "+keycontent+" è nell'array "+contents);

													if(isInArray(keycontent,contents))
													{

														if(risultati[keycontent+''][id]+"" !='undefined' && risultati[keycontent+''].length>0){
												 			if(!isNaN(risultati[keycontent+''][id].rating)){
												 				count=risultati[keycontent+''][id].rating;
												 				newtxt=risultati[keycontent+''][id].texthtml;
												 			}
												 		}

												//controlla che non esista già il risultato


												if(!isInArray(id+'', risultati[keycontent+'']))
												{
												//alert("aggiungo id:"+id);
												// aggiungi ai risultati l'item wordText
												risultati[keycontent+''][id] = new wordText(count+1+parseInt(n),text,newtxt,id);
												}

											}
									});	//end filtro




			       	},
			       complete: function(msg){

			       	}//end chiamata success
						});// end ajax content

   				}
		   		for(var i=0;i<contents.length;i++)
								{
									if(risultati[contents[i]].length!=0){
								//		$("#risultati_ricerca").append("<h2>"+contentLabels[i]+"</h2>");
										}

										risultati[contents[i]].sort(sortByRating);

										var count=0;
										var exit=false;

					      			for (var item in risultati[contents[i]]) {

					      				var resultItem = risultati[contents[i]][item];


								      	if(resultItem.rating+""!='undefined' ||pageArray[resultItem.idpage]+""!='undefined' ){
								      			//alert(resultItem.idpage+"-"+contents[i]);								      		y++;
								      		count++;
								      			var tstring=resultItem.texthtml;
										      	var charstring=tstring.charAt(0).toString();

												     if((charstring=='&'  || charstring=='#' ||  (!isNaN(charstring)))&& tstring.length>0 && charstring!=' ' ){
												      		//alert("++"+tstring+"--"+charstring);
												      	var lt=0;

												      //	alert("----"+charstring+"--"+isNaN(charstring));
												      while((charstring=='&' || charstring=='#' || (!isNaN(charstring))) && tstring.length>0 && charstring!=' ') {
												      		//	alert("CUT--"+charstring+"--"+tstring +"--"+!isNaN(charstring));
												      			lt++;
												      		tstring=tstring.substring(lt,tstring.length);
												      		charstring=tstring.charAt(0).toString();

												      		}
												      	//alert("**"+tstring);
												      }
												      y++;
								      		$("#risultati_ricerca").append('<div class="el_faq"> <div class="qa"><h1><a href="'+pageArray[resultItem.idpage].htmlpath+'" >'+pageArray[resultItem.idpage].pagename+'<!-- RATING: ' + resultItem.rating+'--> </a></h1><p> '+ tstring+'</p></div></div>');

								      		if(count==10){
									      		break;
									      	}
										}
						 				if(exit){break;}
						 			}
					 				if(exit){break;}
					 			}
								//}// end for content

								if(y==0){
									if(langXml=='it'){
								  $("#risultati_ricerca").append('<h3 class="headings">Nessun risultato per: '+textoriginal+"</h3>");
								  }else{
								  $("#risultati_ricerca").append('<h3 class="headings">No result found for: '+textoriginal+"</h3>");
								  	}
								}
			       	$("#risultati_ricerca .loadcomp").html("") ;




} // end searchpage

function sortByRating(a, b) {
    var x = a.rating;
    var y = b.rating;
    return ((x > y) ? -1 : ((x < y) ? 1 : 0));
}


function wordText(rating,texthtml,newtxt,idpage) {
    this.rating = rating;
    this.texthtml =newtxt+texthtml;
    this.idpage = idpage;
}
function pageReferences(pagename,htmlpath,idpage) {
    this.pagename = pagename;
    this.htmlpath =htmlpath;
    this.idpage = idpage;
}


//Generics Method
Array.prototype.inArray = function (value) {
    var i;
    for (i=0; i < this.length; i++) {
      if (this[i] === value) {
        return true;
      }
    }
    return false;
  };

String.prototype.trim = function(str){return
(this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""))}

String.prototype.endsWith = function(str)
{return (this.match(str+"$")==str)}


String.prototype.startsWith = function(str)
{return (this.match("^"+str)==str)}

function GetUrlParam(paramName){
  var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
  var oMatch = oRegex.exec( window.top.location.search ) ;
  if ( oMatch && oMatch.length > 1 )
    return decodeURIComponent( oMatch[1] ) ;
  else
    return '' ;
}

function isInArray(needle, haystack)
{
	var result = false;
	for (i in haystack)
	{
		if(needle==haystack[i]){
			result= true;
			break;
		}
	}
	return result;
}

