var Search = {
	configure : function(q){		
		Search.query = q;
		Search.key = "ABQIAAAA2PK0LtT0JhXIaky2ejs3PRR1z_f0hDCqDb32rayhGvSf2gAcXhS9cAVcdqu5OUao5MRUI9T6eRhTEA";
	},

	execute : function(){
		webSearch.configure(0);
		webSearch.dom();
		webSearch.executeSearch();		
		imageSearch.configure();
		imageSearch.dom();
		imageSearch.executeSearch();		
		youtubeSearch.configure();
		youtubeSearch.dom();
		youtubeSearch.executeSearch();		
		
		frwiktionary.configure();
		frwiktionary.dom();
		frwiktionary.executeSearch();
		
		frwikipedia.configure();
		frwikipedia.dom();
		frwikipedia.executeSearch();		
	}
};

var webSearch = {
	configure : function (start){		
		webSearch.callback = 'webSearch.displayResults';
		webSearch.v = "1.0";
		webSearch.rsz = "large";
		webSearch.q = Search.q;
		webSearch.key = Search.key;
	 	webSearch.url = "http://ajax.googleapis.com/ajax/services/search/web";
	 	webSearch.safe = "moderate";	 	
	 	webSearch.lr = "lang_fr";
	 	webSearch.start = start;
	},

	displayResults : function(r){
		webSearch.resultsDiv.innerHTML = '';
		var data = '';		
		
		if(r.responseData){
			for (var i = 0; i < r.responseData.results.length; i++){				
				data = r.responseData.results[i];
				var container = document.createElement("div");
				var description = document.createElement("span");
				var title = document.createElement("a");
				var url = document.createElement("a");
				container.setAttribute("class","webResultItem");
				container.setAttribute("className", "webResultItem");
				
				description.innerHTML = data.content;
				description.setAttribute("class","resultItemDescription");
				description.setAttribute("className","resultItemDescription");
				
				title.href = data.url;
				title.innerHTML = data.titleNoFormatting;
				title.setAttribute("class","resultItemTitle");
				title.setAttribute("className","resultItemTitle");
				title.setAttribute("target","_blank");
				
				url.href = data.url;
				url.innerHTML = data.url;
				url.setAttribute("class","resultItemUrl");
				url.setAttribute("className","resultItemUrl");
				url.setAttribute("target","_blank");
				container.appendChild(title);
				container.appendChild(description);
				container.appendChild(url);
				webSearch.resultsDiv.appendChild(container);
			}
		}
			
		if(r.responseData){			
			document.getElementById("webResultsPaging").innerHTML = '';
			for (var i = 0; i < r.responseData.cursor.pages.length; i++){
				data = r.responseData.cursor.pages[i];
				var container = document.createElement("span");				
				var url = document.createElement("a");				
				var currentPage = document.createElement("p");
				
				
				
				container.setAttribute("class","webResultPaging");
				container.setAttribute("className", "webResultPaging");
				
				
				if(r.responseData.cursor.currentPageIndex == i){				
					currentPage.innerHTML = data.label;
					currentPage.setAttribute("class","resultPagingTitleCurrentPage");
					currentPage.setAttribute("className","resultPagingTitleCurrentPage");					
					container.appendChild(currentPage);
				}
				else{				
					url.href = "javascript:webSearch.configure("+data.start+");webSearch.executeSearch()";
					url.innerHTML = data.label;
					url.setAttribute("class","resultPagingTitle");
					url.setAttribute("className","resultPagingTitle");
					url.setAttribute("target","_self");
					container.appendChild(url);
				}
				
				//webSearch.resultsDiv.appendChild(container);
				
				document.getElementById("webResultsPaging").appendChild(container);
			}
			
			document.getElementById("webResultsBranding").innerHTML = "<p class=\"via\"><a href=\"http://code.google.com/apis/ajaxsearch/index.html\">Powered by The Google AJAX Search API.</a></p>";
		}
	},

	dom : function(){
		webSearch.resultsDiv = document.getElementById('webResults');
	},

	executeSearch : function(){
		webSearch.i = document.createElement("img");
		webSearch.i.src = "images/global-waiting.gif";
		document.getElementById("webResults").appendChild(webSearch.i);
		webSearch.s = document.createElement("script");
		webSearch.s.type ="text/javascript";
		webSearch.s.charset ="utf-8";
		webSearch.s.src = webSearch.url+"?key=" + webSearch.key +
			"&v=" + webSearch.v +
			"&safe=" + webSearch.safe +
			"&callback=" + webSearch.callback +
			"&rsz=" + webSearch.rsz +			
			"&lr=" + webSearch.lr + 
			"&q=" + Search.query + 
			"&start=" + webSearch.start;
		document.getElementById("webScript").appendChild(webSearch.s);
		
	}
};

var imageSearch = {
	configure : function (){
		imageSearch.callback = "imageSearch.displayResults";
		imageSearch.v = "1.0";
		imageSearch.rsz = "large";
		imageSearch.q = Search.q;
		imageSearch.key = Search.key;
	 	imageSearch.url = "http://ajax.googleapis.com/ajax/services/search/images";
	 	imageSearch.safe = "moderate";		 	
	},

	displayResults : function(r){				
		imageSearch.resultsDiv.innerHTML = '';
		var data = '';
		var max = r.responseData.results.length;
		if(max > 6) 
			max = 6;
		if(r.responseData){
			/* for (var i = 0; i < max; i++){ */
			
			for (var i = 0; i < max; i++){
				data = r.responseData.results[i];
				
			
				
				var container = document.createElement("div");
				var link = document.createElement("a");
				var size = document.createElement("p");
				var thumbnail = document.createElement("img");
				var title = document.createElement("p");
				var weight = document.createElement("p");				
				container.setAttribute("class","imageResultItem");
				container.setAttribute("className","imageResultItem");								
				link.href = data.url;
				link.target = "_blank";
				link.title = data.titleNoFormatting;
				thumbnail.src = data.tbUrl;				
				thumbnail.setAttribute("class","outer-border");
				thumbnail.setAttribute("className","outer-border");
				/*
				thumbnail.width = 78;
				thumbnail.height = 56;
				*/
				var ra = 0.65;
				thumbnail.width = Math.floor(78 * ra) + 78 ;
				thumbnail.height = Math.floor(56 * ra) + 56;
				thumbnail.border = "0";	
				thumbnail.alt = data.titleNoFormatting;
				thumbnail.title = data.titleNoFormatting;
				title.innerHTML = data.titleNoFormatting.substring(0,20);
				title.setAttribute("class","resultItemUrl");
				title.setAttribute("className","resultItemUrl");				
				size.innerHTML = data.width + " x " + data.height + " px";				
				//weight.innerHTML = "Poids : " + Math.round(data.FileSize / 1024) + " K";				
				link.appendChild(thumbnail);
				container.appendChild(link);
				container.appendChild(size);
				//container.appendChild(weight);
				container.appendChild(title);
				imageSearch.resultsDiv.appendChild(container);
			}
			
			var divAutres = document.createElement("div");
			divAutres.setAttribute("class","breaker");
			divAutres.setAttribute("className","breaker");				
			var outLink = document.createElement("a");		
			var outText = document.createElement("p");
			var outVia = document.createElement("p");		
			var outGoogle  = document.createElement("a");
			var outPowered = document.createElement("p");		
			outPowered.innerHTML = "Powered by The Google AJAX Search API.";		
			outGoogle.appendChild(outPowered);
			outGoogle.href = "http://code.google.com/apis/ajaxsearch/index.html";
			outVia.appendChild(outGoogle);
			outVia.setAttribute("class","via");
			outVia.setAttribute("className","via");		
			outText.innerHTML = "D'autres images";
			outText.appendChild(outVia);		
			outText.setAttribute("class","resultItemUrl");
			outText.setAttribute("className","resultItemUrl");		
			outLink.href = "http://www.fouineux.com/snoopall/recherche-web/images/" + Search.query;
			outLink .appendChild(outText);
			divAutres.appendChild(outLink);
		
			
			imageSearch.resultsDiv.appendChild(divAutres);
		}
	},

	dom : function(){
		imageSearch.resultsDiv = document.getElementById("imagesResults");
	},

	executeSearch : function(){
		imageSearch.i = document.createElement("img");
		imageSearch.i.src = "images/global-waiting.gif";
		document.getElementById("imagesResults").appendChild(imageSearch.i);	
		imageSearch.s = document.createElement("script");
		imageSearch.s.type ="text/javascript";
		imageSearch.s.charset ="utf-8";		
		imageSearch.s.src = imageSearch.url+"?key=" + imageSearch.key +
			"&v=" + imageSearch.v +
			"&safe=" + imageSearch.safe +
			"&callback=" + imageSearch.callback +
			"&rsz=" + imageSearch.rsz +
			"&cr=" + imageSearch.cr + 
			"&lr=" + imageSearch.lr + 
			"&q=" + Search.query;	
		document.getElementById("imagesScript").appendChild(imageSearch.s);
	}
};


var frwiktionary = {
	configure : function(){
		frwiktionary.callback = "frwiktionary.displayResults";
		frwiktionary.index = "frwiktionary";
		frwiktionary.se_db = "wiki";
		frwiktionary.se_url = "localhost";		
	},
	
	displayResults : function(r){
		frwiktionary.definitionsResultsDiv.innerHTML = '';
		frwiktionary.traductionsResultsDiv.innerHTML = '';
		var data = '';
		
		if(r != undefined){

			if(r.ResultSet){		
					data = r.ResultSet.Results[0];	

					var container = document.createElement("div");
					var description = document.createElement("span");
					var title = document.createElement("a");
					var url = document.createElement("a");
					container.setAttribute("class","definitionsResultItem");
					container.setAttribute("className", "definitionsResultItem");

					description.innerHTML = data.definition + "<p class=\"via\">via wikitionary</p>";
					
					
					description.setAttribute("class","resultItemDescription");
					description.setAttribute("className","resultItemDescription");

					title.href = data.url;
					title.innerHTML = data.word;
					title.setAttribute("class","resultItemTitle");
					title.setAttribute("className","resultItemTitle");
					title.setAttribute("target","_blank");
					/*
					url.href = data.url;
					url.innerHTML = data.visibleUrl;
					url.setAttribute("class","resultItemUrl");
					url.setAttribute("className","resultItemUrl");
					url.setAttribute("target","_blank");
					*/
					container.appendChild(title);
					container.appendChild(description);
					//container.appendChild(url);
					
					
					
					
					
					

					frwiktionary.definitionsResultsDiv.appendChild(container);


					var container = document.createElement("div");
					var description = document.createElement("span");
					var title = document.createElement("a");
					var url = document.createElement("a");
					container.setAttribute("class","definitionsResultItem");
					container.setAttribute("className", "definitionsResultItem");	

					description.innerHTML = data.traduction + "<p class=\"via\" style=\"margin-top:-10px;\">via wikitionary</p>";
					
				
					
					
					
					description.setAttribute("class","resultItemDescription");
					description.setAttribute("className","resultItemDescription");

					title.href = data.url;
					title.innerHTML = data.word;
					title.setAttribute("class","resultItemTitle");
					title.setAttribute("className","resultItemTitle");
					title.setAttribute("target","_blank");
					
					/*
					url.href = data.url;
					url.innerHTML = data.visibleUrl;
					url.setAttribute("class","resultItemUrl");
					url.setAttribute("className","resultItemUrl");
					url.setAttribute("target","_blank");
					*/
					
					//container.appendChild(title);
					container.appendChild(description);
					//container.appendChild(url);

					frwiktionary.traductionsResultsDiv.appendChild(container);

			}
		}
		else{
			var container = document.createElement("div");
			var description = document.createElement("span");
			container.setAttribute("class","definitionsResultItem");
			container.setAttribute("className", "definitionsResultItem");
			
			description.innerHTML = "Les termes de recherche spécifiés ne correspondent à aucun document. Utilisez des mots plus généraux ou spécifiez un moins grand nombre de mots.";
			description.setAttribute("class","resultItemDescription");
			description.setAttribute("className","resultItemDescription");
			
			container.appendChild(description);		
			frwiktionary.definitionsResultsDiv.appendChild(container);		
			frwiktionary.traductionsResultsDiv.innerHTML = frwiktionary.definitionsResultsDiv.innerHTML;
		}
	},	
	
	dom : function(){
		frwiktionary.definitionsResultsDiv = document.getElementById("definitionsResult");
		frwiktionary.traductionsResultsDiv = document.getElementById("traductionsResult");
	},

	executeSearch : function(){
		frwiktionary.i = document.createElement("img");
		frwiktionary.i.src = "images/global-waiting.gif";
		document.getElementById("definitionsResult").appendChild(frwiktionary.i);		
		frwiktionary.s = document.createElement("script");
		frwiktionary.s.type ="text/javascript";
		frwiktionary.s.charset ="utf-8";
		frwiktionary.s.src = "http://www.snoopall.com/xqueryManager.php?se_url=" + frwiktionary.se_url +
			"&se_db=" + frwiktionary.se_db +
			"&callback=" + frwiktionary.callback +
			"&index=" + frwiktionary.index +
			"&query=" + escape(Search.query);
		document.getElementById("frwiktionaryScript").appendChild(frwiktionary.s);
	}	
};

var frwikipedia = {
	configure : function(){
		frwikipedia.callback = "frwikipedia.displayResults";
		frwikipedia.index = "frwikipedia";
		frwikipedia.se_db = "wiki";
		frwikipedia.se_url = "localhost";		
	},
	
	displayResults : function(r){
		frwikipedia.ResultsDiv.innerHTML = '';		
		var data = '';
		if(r != undefined){
			if(r.ResultSet){	
				data = r.ResultSet.Results[0];	

				var container = document.createElement("div");
				var description = document.createElement("span");
				var title = document.createElement("a");
				var url = document.createElement("a");
				container.setAttribute("class","encyclopedieResultItem");
				container.setAttribute("className", "encyclopedieResultItem");

				description.innerHTML = data.definition + "<p class=\"via\">via wikipedia</p>";
				description.setAttribute("class","resultItemDescription");
				description.setAttribute("className","resultItemDescription");

				title.href = data.url;
				title.innerHTML = data.word;
				title.setAttribute("class","resultItemTitle");
				title.setAttribute("className","resultItemTitle");
				title.setAttribute("target","_blank");
				/*
				url.href = data.url;
				url.innerHTML = data.visibleUrl;
				url.setAttribute("class","resultItemUrl");
				url.setAttribute("className","resultItemUrl");
				url.setAttribute("target","_blank");
				*/
				container.appendChild(title);
				container.appendChild(description);
				//container.appendChild(url);				
				frwikipedia.ResultsDiv.appendChild(container);			
			}
		}
		else{	
			var container = document.createElement("div");
			var description = document.createElement("span");
			container.setAttribute("class","definitionsResultItem");
			container.setAttribute("className", "definitionsResultItem");
			
			description.innerHTML = "Les termes de recherche spécifiés ne correspondent à aucun document. Utilisez des mots plus généraux ou spécifiez un moins grand nombre de mots.";
			description.setAttribute("class","resultItemDescription");
			description.setAttribute("className","resultItemDescription");
			container.appendChild(description);
			
			frwikipedia.ResultsDiv.appendChild(container);	
		}
			
	},
	
	
	dom : function(){
		frwikipedia.ResultsDiv = document.getElementById("encyclopedieResult");
	},

	executeSearch : function(){
		frwikipedia.i = document.createElement("img");
		frwikipedia.i.src = "images/global-waiting.gif";		
		document.getElementById("encyclopedieResult").appendChild(frwikipedia.i);
		
	
		frwikipedia.s = document.createElement("script");
		frwikipedia.s.type ="text/javascript";
		frwikipedia.s.charset ="utf-8";
		frwikipedia.s.src = "http://www.snoopall.com/xqueryManager.php?se_url=" + frwikipedia.se_url +
			"&se_db=" + frwikipedia.se_db +
			"&callback=" + frwikipedia.callback +
			"&index=" + frwikipedia.index +
			"&query=" + escape(Search.query);
		document.getElementById("frwikipediaScript").appendChild(frwikipedia.s);
	}	
}

var youtubeSearch = {
	configure : function(){
		youtubeSearch.vq = Search.query;
		youtubeSearch.orderby = "relevance";
		youtubeSearch.startindex = 1;
		youtubeSearch.maxresults = 6;
		youtubeSearch.alt = "json-in-script"; //wtf? alt=json ---> alt=json-in-script http://code.google.com/support/bin/answer.py?answer=55853&topic=12361
		youtubeSearch.racy = "include";
	},
	
	displayResults : function(r){
		youtubeSearch.resultsDiv.innerHTML = '';
		//var data = '';
		var entry = '';		
		entry = r.feed.entry;				
		var max = entry.length;
		if(max > 6) 
			max = 6;
		if(entry.length > 0){
			for (var i=0; i<max; i++){
				var data = new Object();
				data = entry[i];
				var container = document.createElement("div");
				var length = document.createElement("p");
				var link = document.createElement("a");			
				var thumbnail = document.createElement("img");
				var title = document.createElement("p");
				container.setAttribute("class","videoResultItem");
				container.setAttribute("className","videoResultItem");								
				length.innerHTML = "Durée : " + youtubeSearch.parseLength(data.media$group.yt$duration.seconds);
				link.href = data.link[0].href;
				link.target = "_blank";
				link.title = data.media$group.media$title.$t;
				thumbnail.src = data.media$group.media$thumbnail[0].url;				
				thumbnail.setAttribute('class','outer-border');
				thumbnail.setAttribute('className','outer-border');							
				/*
				thumbnail.width = 78;
				thumbnail.height = 56;
				*/
				var ra = 0.65;
				thumbnail.width = Math.floor(78 * ra) + 78 ;
				thumbnail.height = Math.floor(56 * ra) + 56;
				thumbnail.border = "0";				
				thumbnail.alt = data.media$group.media$title.$t;
				thumbnail.title = data.media$group.media$title.$t;
				title.innerHTML = data.media$group.media$title.$t.substring(0,20);
				title.setAttribute("class","resultItemUrl");
				title.setAttribute("className","resultItemUrl");
				link.appendChild(thumbnail);
				container.appendChild(link);
				container.appendChild(length);			
				container.appendChild(title);
				youtubeSearch.resultsDiv.appendChild(container);
			}
		}
		var divAutres = document.createElement("div");
		divAutres.setAttribute("class","breaker");
		divAutres.setAttribute("className","breaker");				
		var outLink = document.createElement("a");		
		var outText = document.createElement("p");
		var outVia = document.createElement("p");		
		var outGoogle  = document.createElement("a");
		var outPowered = document.createElement("p");		
		outPowered.innerHTML = "Powered by The Google AJAX Search API.";		
		outGoogle.appendChild(outPowered);
		outGoogle.href = "http://code.google.com/apis/ajaxsearch/index.html";
		outVia.appendChild(outGoogle);
		outVia.setAttribute("class","via");
		outVia.setAttribute("className","via");		
		outText.innerHTML = "D'autres vidéos";
		outText.appendChild(outVia);		
		outText.setAttribute("class","resultItemUrl");
		outText.setAttribute("className","resultItemUrl");		
		outLink.href = "http://www.fouineux.com/snoopall/recherche-web/videos/" + Search.query;
		outLink .appendChild(outText);
		divAutres.appendChild(outLink);
		youtubeSearch.resultsDiv.appendChild(divAutres);
	},
	
	dom : function(){
		youtubeSearch.resultsDiv = document.getElementById('videosResults');	
	},
	
	executeSearch : function(){
		youtubeSearch.i = document.createElement("img");
		youtubeSearch.i.src = "images/global-waiting.gif";
		document.getElementById("videosResults").appendChild(youtubeSearch.i);		
		youtubeSearch.s = document.createElement("script");
		youtubeSearch.s.type ="text/javascript";
		youtubeSearch.s.charset ="utf-8";
		youtubeSearch.s.src = "http://gdata.youtube.com/feeds/api/videos?" + 
			"vq=" + youtubeSearch.vq + 
			"&orderby="+ youtubeSearch.orderby + 
			"&start-index=" + youtubeSearch.startindex + 
			"&max-results=" + youtubeSearch.maxresults + 
			"&alt=" + youtubeSearch.alt + 
			"&racy=" + youtubeSearch.racy + 
			"&callback=youtubeSearch.displayResults";
		document.getElementById('videoScript').appendChild(youtubeSearch.s);	
	},
	
	parseLength : function(r){
		var hour = "";
		var minute = parseInt(r/60);
		var second = (r % 60);		
		if(minute >= 60){
			hour = parseInt(minute/60) + ":";
			minute = (minute % 60);
			second = (r % 60) ;
		}		
		if(second == 0)
			second = "00";		
		else if((second.toString()).length == 1)
			second += "0";
		
		var time = hour + "" + minute + ":" + second;
		return time;
	}
};