﻿///// GOOGLE
var GoogleWebSearch = new SearchEngine({name:"Google", desc:"Google Web Search", imageUrl:"Images/new/google.gif"});
GoogleWebSearch.searchData = {};
GoogleWebSearch.searchFunc = function doGoogleSearch(term, id, offset, opts)
{
  var search = GoogleWebSearch.searchData[id] || {id: id, total:0, required: searchResultsToShow, offset:offset, term:term, options:opts};
  GoogleWebSearch.searchData = {};
  GoogleWebSearch.searchData[id] = search;
  var url = [];
  if (search.options.searchType=="web")
  {  
    url.push("http://ajax.googleapis.com/ajax/services/search/web?v=1.0"); 
    url.push("&rsz=large");
    if (search.options.ilang && this.interfaceLanguages && this.interfaceLanguages[search.options.ilang])
    url.push("&hl="+this.interfaceLanguages[search.options.ilang]);
      if (search.options.lang && this.languages && this.languages[search.options.lang])
    url.push("&lr="+this.languages[search.options.lang]);
      if (search.options.country && this.countries && this.countries[search.options.country])
    url.push("&cr="+this.countries[search.options.country]);
  }
  else if (search.options.searchType=="image")
  {
    url.push("http://ajax.googleapis.com/ajax/services/search/images?v=1.0");
    if (search.options.adult_ok)
      url.push("&safe=off");
    else if (search.options.safeContent)
      url.push("&safe=active");
    if (search.options.imageSize)
    {
      switch(search.options.imageSize)
      {
        case "icon":
        case 1:
         url.push("&imgsz=icon");
         break;
        case "small":
        case 2:
         url.push("&imgsz=small");
         break;
        case "medium":
        case 3:
         url.push("&imgsz=medium");
         break;
        case "large":
        case 4:
         url.push("&imgsz=large");
         break;
        case "xlarge":
        case 5:
         url.push("&imgsz=xlarge");
         break;
        case "xxlarge":
        case 6:
         url.push("&imgsz=xxlarge");
         break;         
        case "huge":
        case 7:
          url.push("&imgsz=huge");
          break;
      }
    }
        
    if (search.options.colorOnly)
      url.push("&imgc=color");
    else if (search.options.blackWhiteOnly)
      url.push("&imgc=gray");
    if (search.options.format) //bmp, gif, jpeg, png, or any (default)
      url.push("&format=search.options.format");
  }
  
  
  url.push("&q="+encodeURIComponent(term)); 
  url.push("&key=ABQIAAAA9cRPVM_n_SVX8o_xWz8Q0BT2yXp_ZAY8_ufC3CFXhHIE1NvwkxS6irDhqsSmBJoJM0R6LYp4pL-8Bw");
  url.push("&start="+offset);
  url.push("&callback=GoogleWebSearch.SearchCallback");
  url.push("&context="+id);  
  
  url.push("&r="+new Date().valueOf());
  addScript(url.join(''),"GoogleSearch_"+id);
}

GoogleWebSearch.SearchCallback = function(id,googleresults,c,d,e,f,g,h)
{
  //$("GoogleSearch_"+id).remove.delay(0);
  
  var search = GoogleWebSearch.searchData[id];
  if (!search)
    return;
  var resultsArr = googleresults && googleresults.results;
  var cursor = googleresults && googleresults.cursor;        
  if (!cursor || !resultsArr || !cursor.pages) //nothing found
  {
    notifyEngineResultsEstimation("Google",id,0);
    notifyEngineResults("Google",id, [], search.offset, false);
    GoogleWebSearch.searchData[id] = null;
    return;
  }
  var hasMore = cursor.currentPageIndex+1 < cursor.pages.length;
  var resultIdx = parseInt(cursor.pages[cursor.currentPageIndex].start);
  var lastResultIdx = parseInt(resultIdx + resultsArr.length);  
  var ret = [];
  if (resultIdx==0)
  {    
    var lastResultIdx = cursor.pages.length * resultsArr.length;
    notifyEngineResultsEstimation("Google",id,cursor.estimatedResultCount, Math.min(cursor.estimatedResultCount,lastResultIdx));
  }
  for(var i=0,j=resultsArr.length;i<j;i++)
  {
    if (search.options.searchType=="web")
    {
      ret.push( 
      {
        rank : i,
        title: resultsArr[i].title,
        description: sanitize(resultsArr[i].content),
        url: Url.decode(resultsArr[i].url),
        visibleUrl: Url.decode(resultsArr[i].visibleUrl),
        clearTitle : resultsArr[i].titleNoFormatting
      });
    } 
    else if (search.options.searchType=="image")
    {
      ret.push(
      {
        Url: resultsArr[i].visibleUrl,
        ClickUrl : resultsArr[i].unescapedUrl,
        //FileFormat : resultsArr[i].FileFormat,
        //FileSize : resultsArr[i].FileSize,
        Height : resultsArr[i].height,
        Width : resultsArr[i].width,
        Summary: resultsArr[i].content,
        SummaryText: resultsArr[i].contentNoFormatting,
        Title : resultsArr[i].titleNoFormatting,
        ThumbnailUrl: resultsArr[i].tbUrl,
        ThumbnailHeight: resultsArr[i].tbHeight,
        ThumbnailWidth: resultsArr[i].tbWidth        
      });
    }
  }
  notifyEngineResults("Google",id,ret,resultIdx, hasMore);
  search.total += ret.length;
  if (search.total <= search.required && hasMore)
  {      
    GoogleWebSearch.searchFunc(search.term, search.id, search.offset+search.total, search.options);
  }
  else
    GoogleWebSearch.searchData[id] = null;
}


GoogleWebSearch.CreateSearch = function(term, id, options)
{
  var srch = new Search(this, term, id, options);
  srch.InternalGetPage = function (pageNumber, pageReadyCallback, notifyEstimatesCallback)
  {
    var additionalOffset = 0;
    if (this.Pages[pageNumber])
    {
      additionalOffset = this.Pages[pageNumber].length;
    }
    
    GoogleWebSearch.searchFunc(this.term, this.id, additionalOffset+(pageNumber-1)*searchResultsToShow, options);
  }
  return srch;
}
GoogleWebSearch.Register();
