// $Id: google.js 283 2005-04-18 00:43:18Z takayama $
// License: GPL

// 検索件数
var num = 20;

var now;
var lst = 0;
var sel = 0;

var tabs = new Array();
var keys = new Array();

var url  = 'http://espion.just-size.jp/files/js/google/google.cgi';

function init() {
   insertQuery();
}

function newHttp() {
   var xmlhttp = false;
   /*@cc_on @*/
   /*@if (@_jscript_version >= 5)
   // JScript gives us Conditional compilation, we can cope with old IE versions.
   // and security blocked creation of the objects.
   try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
      try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
         xmlhttp = false;
      }
   }
   @else
   xmlhttp=false
   @end @*/
   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      try {
         xmlhttp = new XMLHttpRequest();
      } catch (e) {
         xmlhttp=false
      }
   }
   return xmlhttp;
}

function search(key, mySel) {
   var sel = 0;
   var del = false;
   var nav = 0;
   var cache  = new Array();
   for (i=0;i<20;i++) {
      cache[i] = new Array();
   }

   this.exec = function(page) {
      if(page == -1) page = sel;
      if(cache[page] == '') {
         request(page, 1);
      } else {
         setResult(page);
         request(page+1);
      }
      sel = page;
   }

   this.del = function() {
      cache = Array();
      del = true;
   }

   var request = function(page, flag) {
      if (cache[page] != '') return;

      var xmlhttp = newHttp();
      if (!xmlhttp) return;
      if (xmlhttp.readyState == 1 || xmlhttp.readyState == 2 || xmlhttp.readyState == 3) return;

      lst++;
      xmlhttp.open("GET", url+"?num="+num+"&q="+encodeURIComponent(key)+"&start="+(page*num), true);
      xmlhttp.onreadystatechange = new searchResults(xmlhttp, key, page, flag, lst);
      xmlhttp.send(null)
   }

   var setResult = function(page) {
      document.getElementById('results').innerHTML = cache[page][0];
      setNav(page);
   }

   var searchResults = function(xmlhttp, key, page, flag, set) {
      return function() {
         if (xmlhttp.readyState == 4 && xmlhttp.status == 200 && !del) {
            var result = xmlhttp.responseText;
            var int    = parseInt(result.slice(-8, -6), 10);

            cache[page][0] = result;
            if(nav < int) nav = int;

            if(flag == 1) {
               if(lst == set) setResult(page);
               request(page+1);
            }
         }
      }
   }

   var setNav = function(page) {
      var wt = '';
      if(mySel > 0) wt += "<a href='javascript:void(0);' onClick='clTab("+mySel+");return false;'>[CLOSE]<\/a>&nbsp;&nbsp;";

      for (i = 0;i < nav;i++) {
         var nClass;
         if(i == page) nClass = 'nNow';
         else nClass = 'navi';
         wt += "<a href='javascript:void(0);' class="+nClass+" onClick='setPage("+i+");return false;'>"+(i+1)+"<\/a>";
      }

      document.getElementById('nav1').innerHTML = wt;
      document.getElementById('nav2').innerHTML = wt;
   }
}

function setTab(key) {
   var wt = '';
   var nClass;
   for (i in tabs) {
      if(keys[i] == '') continue;
      if(i == key) nClass = 'tNow';
      else nClass = 'tab';
      wt += "<a href='javascript:void(0);' class="+nClass+" onClick='chTab("+i+");return false;'>"+keys[i]+"<\/a>";
   }

   document.getElementById('tab1').innerHTML = wt;
   document.getElementById('tab2').innerHTML = wt;
}

function clTab(n) {
   if(n > 0) {
      now.del();
      tabs[n] = '';
      keys[n] = '';
      for(n;n > 0;n--) {
         if(tabs[n]) break;
      }
      now = tabs[n];
      now.exec(-1);
      setTab(n);
   }
}

function chTab(n) {
   lst++;
   now = tabs[n];
   now.exec(-1);
   setTab(n);
}

function setPage(i) {
   now.exec(i);
   scroll(0, 0);
}

function doSearch() {
   key = document.gForm.q.value;

   if(!key) return false;

   document.getElementById('nav1').innerHTML = document.getElementById('nav2').innerHTML = 'now loading...';

   tabs[sel] = new search(key, sel);
   keys[sel] = key;

   chTab(sel);
   sel++;
}


// おまけ
function insertQuery() {
   var query = document.location.href;
   if(query.indexOf('?') == -1) return;
   query = query.split('?');
   query = query[1].split('#');
   query = query[0].split('&');
   for (i in query) {
      var val = query[i].split('=');
      if(val[0] == 'q') {
         document.gForm.q.value = decodeURIComponent(val[1]).replace(/\+/g, ' ');
         doSearch();
         break;
      }
   }
}

