/* Copyright 2006-2010 Marlin Arms Corporation.  All rights reserved. */

/* 今のところコードをきれいにする努力はほとんどしていませんので、
   ご承知の上ご参考になさってください。m(_ _)m */

/* linked to:  dictjuggler.net/dictjuggler.js
               widget/src/DictJugglerMini.js
               Mac/Linbrary/widget/DictJugglerMini/DictJugglerMini.js
*/

var GTimeUpdateInterval = 20;  /* 秒単位 */
var GTimerRunning = false;
var GTimeColor = "#333333";

var defaultEJDict = "Eijiro";
var defaultJEDict = "Yahoodicts";
var defaultJJDict = "Yahoodicts";
var defaultEEDict = "english-english";
var defaultZipMap = "Livedoor-map";
var defaultEncyclopedia = "Weblio";

var dateTimeIsBeeingDisplayed = false;
var GPreviousSearchString = "";

function dictJugglerSearch() {
  var searchWord = document.getElementById('dictjugglerString').value;
  //  var dict = document.getElementById('engine-selection').value;
  dictJugglerSearchString(searchWord);
}



function guessDict( value ) {
  return "Weblio";
  
}


function getUrlFromDictAndWord(dict, word) {
  var url = helpURL;
  log("will doSearch with '" + dict + "'; word=" + word);

  value = word;
  if (isYahooWidget) {
    value = escape(value); // 漢字はうまくいかない
  }

  switch (dict) {

  case "URL":
    url = value;
    break;

  case "yakugo":
  case "yamaoka":
//    url = "http://studio1.idd.tamabi.ac.jp/corpus/script/check.cgi?word=" + value + "";

    if (isYahooWidget || isMacOSXWidget) {
      var escapedWord = yakugoEscape_utf8(value);
      escapedWord = escapedWord.toLowerCase();


      while (escapedWord.lastIndexOf("%") >=0) {
	escapedWord = escapedWord.replace("%", "");
      }
      var filename = yakugoSplitFilenameWithSlash(escapedWord);
      url = "http://www.dictjuggler.net/yakugo/" + filename;    
    }
    else if (isWebpage) {
      var escapedWord = yakugoEscape_utf8(value);
      escapedWord = escapedWord.toLowerCase();
      while (escapedWord.lastIndexOf("%") >=0) {
	escapedWord = escapedWord.replace("%", "");
      }
      var filename = yakugoSplitFilenameWithSlash(escapedWord);
      url = "http://www.dictjuggler.net/yakugo/" + filename;
      // alert(url);
      // showURL(filename);
      // return;
    }

    break;

  case "ruigo":
    //url = "http://thesaurus.weblio.jp/content/" + value;

    if (isYahooWidget || isMacOSXWidget) {
      var escapedWord = escape_utf8(value);
      escapedWord = escapedWord.toLowerCase();
      while (escapedWord.lastIndexOf("%") >=0) {
	escapedWord = escapedWord.replace("%", "");
      }
      var filename = splitFilenameWithSlash(escapedWord);
      url = "http://www.dictjuggler.net/tamatebako/" + filename;
    }
    else if (isWebpage) {
      var escapedWord = escape_utf8(value);
      escapedWord = escapedWord.toLowerCase();
      while (escapedWord.lastIndexOf("%") >=0) {
	escapedWord = escapedWord.replace("%", "");
      }
      var filename = splitFilenameWithSlash(escapedWord);
      url = "http://www.dictjuggler.net/tamatebako/" + filename;
      // alert(filename);
    }
    break;

  case "transportation":
    if (value.match("^([^ ]+)[ 　]+([^ ]+)$")) {

      from = RegExp.$1;
      to = RegExp.$2;

      url = "http://www.google.co.jp/maps?hl=ja&ie=UTF8&f=d&saddr="
	+ from + "&daddr=" + to + "&dirflg=r";
/*
      from = escape(RegExp.$1);
      to = escape(RegExp.$2);
      url = "http://www.ekikara.jp/cgi-bin/route.cgi?intext=" + from
	+ "&outtext=" + to;
*/
    }
    else {
      url = "http://www.google.co.jp/search?rls=ja-jp&q=乗り換え%20"
	+ value + "ie=UTF-8&oe=UTF-8";
    }
    break;


/** Begin ** 
  Generated by convert-sitelist-to-djmini-js-url.pl **/

  case "Google":
    url = "http://www.google.co.jp/search?rls=ja-jp&q=" + value + "&ie=UTF-8&oe=UTF-8";
    break;

  case "okonomi":
    url = "http://www.dictjuggler.net/search/?job=favorite&word=" + value;
    break;

  case "okonomi-beta":
    url = "http://www.dictjuggler.net/search3/?job=favorite&word=" + value;
    break;

  case "translation-ej":
    url = "http://www.dictjuggler.net/search/?job=trej&word=" + value;
    break;

  case "translation-je":
    url = "http://www.dictjuggler.net/search/?job=trje&word=" + value;
    break;

  case "Eijiro":
    url = "http://eow.alc.co.jp/" + value;
    break;

  case "Yahoodicts":
    url = "http://dic.yahoo.co.jp/bin/dsearch?p=" + value + "&stype=0&dtype=2&enc=UTF-8";
    break;

  case "Yahoo":
    url = "http://search.yahoo.co.jp/search?tt=c&ei=UTF-8&fr=sfp_as&aq=-1&oq=" + value + "how&p=" + value + "&meta=vc%3D";
    break;

  case "Google-phrase":
    url = 'http://www.google.com/search?hl=ja&rls=ja-jp&q="' + value + '"&btnG=Google+%E6%A4%9C%E7%B4%A2&lr="';
    break;

  case "Google-towa":
    url = "http://www.google.com/search?rls=ja-jp&q=" + value + escape("とは") + "&ie=UTF-8&oe=UTF-8";
    break;

  case "Google-define":
    url = "http://www.google.com/search?rls=ja-jp&q=define:+" + value + "&ie=UTF-8&oe=UTF-8";
    break;

  case "Google-japanese":
    url = "http://www.google.co.jp/search?hl=ja&q=" + value + "&btnG=Google+"  + escape("検索") + "&lr=lang_ja";
    break;

  case "Google-maps":
    url = "http://maps.google.co.jp/maps?f=q&hl=ja&q=" + value;
    break;

  case "Google-image":
    url = 'http://images.google.com/images?q=' + value + '&hl=ja&btnG=' + escape("イメージ検索");
    break;

  case "AmazonJuggler":
    url = "http://www.dictjuggler.net/juggle/amazon-juggler.php?kind=keyword&searchString=" + value;
    break;

  case "AmazonAuthor":
    url = "http://www.dictjuggler.net/juggle/amazon-juggler.php?kind=author&searchString=" + value;
    break;

  case "AmazonTitle":
    url = "http://www.dictjuggler.net/juggle/amazon-juggler.php?kind=title&searchString=" + value;
    break;

  case "Amazon-Japan":
    url = "http://www.amazon.co.jp/gp/search?ie=UTF8&keywords=" + value + "&index=blended&linkCode=ur2";
    break;

  case "Amazon-com":
    url = value = value.replace(/ /g, "%20"); url = "http://www.amazon.com/gp/search?ie=UTF8&keywords=" + value + "&tag=marlinarmscor-20&index=blended&linkCode=ur2&camp=1789&creative=9325";
    break;

  case "Weblio":
    url = "http://www.weblio.jp/content/" + value;
    break;

  case "shokenkaikei":
    url = "http://www.shokenkaikei.com/finacc/finacc.php?word=" + value;
    break;

  case "e-words":
    url = "http://www.google.co.jp/search?hl=ja&as_qdr=all&q=" + value + "++site%3Ahttp%3A%2F%2Fe-words.jp%2F&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&btnI=I%27m+Feeling+Lucky&lr=";
    break;

  case "flickr":
    url = "http://www.flickr.com/search/?q=" + value;
    break;

  case "YouTube":
    url = "http://www.youtube.com/results?search_query=" + value + "&search=Search";
    break;

  case "Wikipedia-j":
    url = "http://ja.wikipedia.org/wiki/" + value;
    break;

  case "Wikipedia-e":
    url = "http://en.wikipedia.org/wiki/Special:Search?search=" + value + "&go=Go";
    break;

  case "kanji":
    url = "http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=" + value + "&dtype=0&stype=1&dname=0na";
    break;

  case "english-english":
    url = "http://dictionary.reference.com/browse/" + value;
    break;

  case "english-thesaurus":
    url = "http://encarta.msn.com/thesaurus_/" + value + ".html";
    break;

  case "zip-japan":
    url = "http://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=" + value + "&x=0&y=0";
    break;

  case "Answer-com":
    url = "http://www.answers.com/" + value;
    break;

  case "japanese-chinese":
    url = "http://www.excite.co.jp/dictionary/japanese_chinese/?search=" + value + "&match=beginswith";
    break;

  case "chinese-japanese":
    url = "http://www.excite.co.jp/dictionary/chinese_japanese/?search=" + value + "&submit=+" + escape("検") + "+" + escape("索") + "&match=beginswith";
    break;

  case "japanese-korean":
    url = "http://krdic.naver.jp/search/all/" + value;
    break;

  case "korean-japanese":
    url = "http://krdic.naver.jp/search/all/" + value;
    break;

  case "english-korean":
    url = "http://dic.impact.pe.kr/ecmaster-cgi/search.cgi?kwd=" + value + "bool=and&word=yes";
    break;

  case "english-chinese":
    url = "http://www.mandarintools.com/cgi-bin/wordlook.pl?word=" + value + "&searchtype=chinese&where=whole";
    break;

  case "english-german":
    url = "http://www.dict.cc/?s=" + value;
    break;

  case "english-french":
    url = "http://www.wordreference.com/enfr/" + value;
    break;

  case "french-english":
    url = "http://www.wordreference.com/fren/" + value;
    break;

  case "english-italian":
    url = "http://www.wordreference.com/enit/" + value;
    break;

  case "italian-english":
    url = "http://www.wordreference.com/iten/" + value;
    break;

  case "english-spanish":
    url = "http://www.wordreference.com/es/translation.asp?tranword=" + value + "&v=b";
    break;

  case "spanish-english":
    url = "http://www.wordreference.com/es/en/translation.asp?spen=" + value + "&v=b";
    break;

  case "yahoo-shopping":
    url = "http://shopping.yahoo.co.jp/search?p=" + value + "&cspid=&first=1";
    break;

  case "cookpad":
    url = "http://cookpad.com/レシピ/" + value;
    break;

  case "weather":
    url = "http://search.weather.yahoo.co.jp/bin/search?pref=all&p=" + value + "&s=";
    break;

  case "tohoho-html":
    url = "http://www.tohoho-web.com/html/" + value + ".htm";
    break;

  case "css":
    url = "http://www.google.co.jp/search?hl=ja&as_qdr=all&q=" + value + "++site%3Ahttp%3A%2F%2Fwww.htmq.com/style%2F&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&btnI=I%27m+Feeling+Lucky&lr=";
    break;

  case "tohoho-javascript":
    url = "http://www.google.co.jp/search?hl=ja&as_qdr=all&q=" + value + "++site%3Ahttp%3A%2F%2Fwww.tohoho-web.com%2Fjs&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&btnI=I%27m+Feeling+Lucky&lr=";
    break;

  case "PHP":
    url = "http://www.google.co.jp/search?hl=ja&as_qdr=all&q=" + value + "++site%3Ahttp%3A%2F%2Fphp.net&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&btnI=I%27m+Feeling+Lucky&lr=";
    break;

  case "Perl":
    url = "http://www.google.co.jp/search?hl=ja&as_qdr=all&q=" + value + "++site%3Ahttp%3A%2F%2Fcocohome.hp.infoseek.co.jp%2Fperl_ref%2F&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&btnI=I%27m+Feeling+Lucky&lr=";
    break;

  case "Google-code":
    url = "http://www.google.com/codesearch?hl=en&lr=&q=" + value + "&btnG=Search";
    break;

  case "yippy":
    url = "http://search.yippy.com/search?input-form=clusty-simple&v%3Asources=webplus&v%3Aproject=clusty&query=" + value;
    break;
/** END ** 
  Generated by convert-sitelist-to-djmini-js-url.pl **/


  }
  return url;

}

function dictJugglerDoSearch(dict, value) {
  var url = helpURL;
  log("will doSearch with '" + dict + "'; word=" + value);

  url = getUrlFromDictAndWord(dict, value);


  if (isMacOSXWidget) {
    document.getElementById('searchString').focus(true);

    document.getElementById('searchString').select();
  }

  if (dict=="open") {
    if (isMacOSXWidget  || isYahooWidgetForMac) {
      // log("the URL is: " + url);

      var option = " -a ";
      if (url.match("^([Ee][Xx][Cc][Ee][Ll]|[Mm][Ee])$") ) {
	url = "Microsoft Excel";
      }
      else if (url.match("^([Ww][Oo][Rr][Dd]|[Mm][Ww])$")) {
	url = "Microsoft Word";
      }
      else if (url.match("^([Pp][Oo][Ww][Ee][Rr][Pp][Oo][Ii][Nn][Tt]|[Mm][Pp])$")) {
	url = "Microsoft PowerPoint";
      }
      else if (url.match("^([Ii]llustrator|[Aa][Ii][Ll]?)$")) {
	option = " -b ";
	url = "com.adobe.illustrator";
      }
      else if (url.match("^([Pp]hotoshop|[Aa][Pp])$")) {
	option = " -b ";
	url = "com.adobe.Photoshop";
      }
      else if (url.match("^([Ii]n[Dd]esign|[Aa][Ii][Dd])$")) {
	option = " -b ";
	url = "com.adobe.Indesign";
      }
      else if (url.match("^([Aa]crobat *[Pp]ro|[Aa][Aa][Pp])$")) {
	option = " -b ";
	url = "com.adobe.Acrobat.Pro";
      }
      else if (url.match("^([Aa]crobat|[Aa]crobat *[R]eader|[Aa][Rr])$")) {
	option = " -b ";
	url = "com.adobe.Reader";
      }
      else if (url.match("^([Vv][Nn][Cc])$")) {
	url = "Chicken of the VNC";
      }
      else if (url.match("^([Qq][Tt])$")) {
	url = "QuickTime Player";
      }
      else if (url.match("^([Oo][Gg][Pp])$")) {
	url = "OmniGraffle Professional";
      }
      else if (url.match("^([Oo][Gg])$")) {
	url = "OmniGraffle";
      }
      else if (url.match("^([Oo][Oo])$")) {
	option = " -b ";
	url = "com.omnigroup.OmniOutliner";
      }
      else if (url.match("^([Jj][Ee][Dd][Ii][Tt][Xx])|([Jj][Xx])$")) {
	option = " -b ";
	url = "jp.co.artman21.JeditX";
      }
      else if (url.match("^([Jj][Ee][Dd][Ii][Tt])|([Jj]4)$")) {
	option = " -b ";
	url = "jp.co.matsumoto.Jedit4";
      }
      else if (url.match("^([Tt][Vv])$")) {
	url = "PixeStationTV(G4)";
      }
      else if (url.match("^([Pp][Aa][Rr][Aa])$")) {
	url = "Parallels\ Desktop";
      }
      else if (url.match("^([Dd][Jj])$")) {
	url = "DictJuggler";
      }
      else if (url.match("^([Dd][Uu])$")) {
      	url = "Disk\ Utility";
      }
      //      else if (url.match("[Fm][Mm]")) {
      //	option = " -b ";
      //url = "com.omnigroup.OmniOutliner";
      // }
      else if (url.match("^[Ff][Ff]$")) {
	url = "Firefox";
      }


      url = "\'" + url + "\'";
      //      document.getElementById('searchString').value = url;

      var status = run(option + " "  + url);

      if (status != undefined) {
	if (isMacOSXWidget) {
	  say("Ooops!");
	}
	else if (isYahooWidgetForMac) {
	  beep(); sleep(300); beep();
	}
      }
      else {
	// say(" OK");
	// widget.system("/usr/bin/say " + url + " wo kid oh she mash ee ta", null );
      }

      /*	
      if (isMacOSXWidget) {
	error = widget.system("/usr/bin/open " + option + " "  + url, null).errorString;
	// document.getElementById('searchString').value = error;
	if (error != undefined) {
	  say("Ooops!");
	}
	else {
	  widget.system("/usr/bin/say " + " OK", null );
	  // widget.system("/usr/bin/say " + url + " wo kid oh she mash ee ta", null );
	}
      }
      else { // Yahoo Widget for Mac
	status = runCommand("/usr/bin/open " + option + " "  + url);
	beep();	sleep(200); beep();
	say(url + " wo kid oh she mash ee ta" );
	// log(status);
      }
      */

      /*
      if (status == 0) {
	document.getElementById('searchString').value = "起動しました";
	var id = setTimeout(displayOriginalMessage(originalMessage), 500);
      }
      var originalMessage = document.getElementById('searchString').value;
      var param = "/bin/ls /Applications/" + url + '.app "  /Applications/'
		      + '*' + '/' + url + '.app"'
      var existsApplicationP =
	widget.system("/bin/ls /Applications/" + url + '.app "/Applications/'
		      + '*' + '/' + url + '.app"', null).status;
	//var appliPath = widget.system("/usr/bin/find /Applications/ -type d -name " + url + ".app", null).status;
      document.getElementById('searchString').value = "|" + existsApplicationP + "|";

      if (existsApplicationP != 0) {
	document.getElementById('searchString').value = "見つかりません";
	for (var i=0; i<100000; i++) {
	  ;
	}
	document.getElementById('searchString').value = originalMessage;
	document.getElementById('searchString').focus(true);
	document.getElementById('searchString').select();
	// var id = setTimeout(displayOriginalMessage(originalMessage), 2000);
      }
      else {
	document.getElementById('searchString').focus(true);
	document.getElementById('searchString').select();
	var status = widget.system("/usr/bin/open -a " + url, null);

	//	if (status == 0) {
	// document.getElementById('searchString').value = "起動しました";
	// var id = setTimeout(displayOriginalMessage(originalMessage), 500);
	}
      }
      */
  
    }
    else {
      log("will run command: " + url);
      runCommand("/usr/bin/open -a " + url);
    }
  }
  else {
    log("final URL=" + url);
    openURL(url);
  }

}




function openHandler() {
  ;
}

function displayOriginalMessage( originalMessage ) {
  document.getElementById('searchString').value = originalMessage;
  document.getElementById('searchString').focus(true);
  document.getElementById('searchString').select();
}

function dictJugglerSearchString (inputString) {

  // 時刻表示のため ここでやるのはちょっと汚いが
  // engineSelection のonDragDropでもやる必要があるので、そこにも同じことを書いてある
  GDidSomethingAfterOnTimer = true;


  var value = inputString;


  value = normalize(value);
  if (isMacOSXWidget || isWebpage) {
    var dict = document.getElementById('engineSelection').value;

    if (window.widget) {
      widget.setPreferenceForKey(dict, "engineSelection"); // trying
      widget.setPreferenceForKey(value, "searchWord");
    }

  }
  else { // Yahoo! Widget
    var dict = convertDictStringToDictIDString(preferences.searchEngine.value);
  }

  log("in dictJugglerSearchString, inputString=" + value + "; engine=" + dict);

  if (value.length <= 0) {
    if (isMacOSXWidget || isWebpage) {
      value = document.getElementById('searchString').value;
    }
    else {
      value = preferences.searchStringValue.value;
    }

    if (value.length <= 0) {
      return;
    }
    else {
      ;
      //log("value = " + value);
    }
  }
  else {
    if (isYahooWidget) {
      preferences.searchStringValue.value = value;
    }
  }


  log("searching string=" + value);

  var returnedVal = determineDictAndSearchWord(dict, value)
  dict = returnedVal['dict'];
  value = returnedVal['searchString'];

  log("after determineDictAndSearchWord" + dict + ":" + value);
  if (dict == "url") {
    openURL(value);
  }

  // log("dict=" + dict + "; value=" + value);
  
  dictJugglerDoSearch(dict, value);

  // 11/8/2006 (Wed)  次回の検索時に同じかどうかを判断するため。
  // 同じ検索文字列の時に、メニューが選択されたらすぐに検索を開始する
  // ここでいいのかな？
  GPreviousSearchString = value;

}


function determineDictAndSearchWord(dict, value) {

  var url;
  var httpRegexp1 = new RegExp("^ *http.*//");
  var httpRegexp2 = new RegExp("^ *www\.");
  //var calcRegexp = new RegExp("^[0-9]*$");
  var calcRegexp = new RegExp("^[- 　0-9.,，０-９*/+xXｘＸ^＊＋−×÷＾ー()（）]*$");


//   alert(dict + ":" + value);
  if (false) {
    ;
  }

  /*  version 1.3から止める。辞書指定を優先
  else if (value.match("^[ 　	]*〒?([0-9０-９]{3}-[0-9０-９]{4})[ 　	]*$") &&
     !  preferences.searchEngine.value.match("天気") // う〜〜、汚い
      )
      {
    // log("郵便番号");
    dict = defaultZipMap;
    value = RegExp.$1;
    //郵便番号
   ; // 下の方でマッチするが、計算と思われないようにここで一旦マッチ。
  }
  */

  else if (value.match("^[　 ]*[?？][　 ]*$")) {
    //openURL(helpURL);
    return { 'dict': "url", 'url': helpURL }; //Objectをreturn
//    return;
  }
  else if (value.match(httpRegexp1)) {
    // log("matched: " + value);
    var strlen = value.length;
    while (strlen > 0 &&
	   (value.substr(strlen-1,1) == " " || value.substr(strlen-1,1) == " ")) {
      value = value.substr(0, strlen-1);
      strlen = value.length;
      // log(value);
    }
    // openURL(value);
    return { 'dict': "url", 'url': value }; //Objectをreturn
//    return;
  }
  else if (value.match(httpRegexp2)) {
    value = "http://" + value;
    // log("matched: " + value);

    // openURL(value);
    return { 'dict': "url", 'url': value }; //Objectをreturn
    //    return;
  }

  /*  version 1.3から止めようと思ったが、便利なのでそのまま */
    else if (value.match(calcRegexp) &&
	     ! value.match("^[ 　]*[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][ 　]*$") &&
	     ! value.match("^[ 　]*[0-9]+[ 　]*$")
	     ) {
    dict = "Google";
    // log(dict + ": " + value);
    value = value.replace(/ー/g, "-");
    value = value.replace(/\+/g, "%2B");
      // log("value=" + value);
    url = "http://www.google.co.jp/search?hl=ja&q=" + value + "";
    //    url = "http://www.google.co.jp/search?hl=ja&q=" + value + "&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=";


      // openURL(url);
    return { 'dict': "url", 'url': url }; //Objectをreturn
      //return;
  }
  
  log("URL not matched; value=" + value);



  // <a name="shortcutmatching"> </a> ********
  if (false) {
    ;
  }

/** Begin ** 
  Generated by convert-sitelist-to-djmini-js-shortcut.pl **/
else if (value.match("^([gG])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG])$") ) {
    value = RegExp.$2;
    dict = "Google";
  }
else if (value.match("^([fF][vV])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([fF][vV])$") ) {
    value = RegExp.$2;
    dict = "okonomi";
  }
else if (value.match("^([fF][vV][bB])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([fF][vV][bB])$") ) {
    value = RegExp.$2;
    dict = "okonomi-beta";
  }
else if (value.match("^([tT][eE][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][eE][jJ])$") ) {
    value = RegExp.$2;
    dict = "translation-ej";
  }
else if (value.match("^([tT][rR][eE][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][rR][eE][jJ])$") ) {
    value = RegExp.$2;
    dict = "translation-ej";
  }
else if (value.match("^([tT][jJ][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][jJ][eE])$") ) {
    value = RegExp.$2;
    dict = "translation-je";
  }
else if (value.match("^([tT][rR][jJ][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][rR][jJ][eE])$") ) {
    value = RegExp.$2;
    dict = "translation-je";
  }
else if (value.match("^([eE][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][jJ])$") ) {
    value = RegExp.$2;
    dict = "Eijiro";
  }
else if (value.match("^(英辞郎)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(英辞郎)$") ) {
    value = RegExp.$2;
    dict = "Eijiro";
  }
else if (value.match("^(英和)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(英和)$") ) {
    value = RegExp.$2;
    dict = "Eijiro";
  }
else if (value.match("^(和英)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(和英)$") ) {
    value = RegExp.$2;
    dict = "Eijiro";
  }
else if (value.match("^([yY][dD])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([yY][dD])$") ) {
    value = RegExp.$2;
    dict = "Yahoodicts";
  }
else if (value.match("^([jJ][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][eE])$") ) {
    value = RegExp.$2;
    dict = "Yahoodicts";
  }
else if (value.match("^([jJ][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][jJ])$") ) {
    value = RegExp.$2;
    dict = "Yahoodicts";
  }
else if (value.match("^(国語)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(国語)$") ) {
    value = RegExp.$2;
    dict = "Yahoodicts";
  }
else if (value.match("^(国)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(国)$") ) {
    value = RegExp.$2;
    dict = "Yahoodicts";
  }
else if (value.match("^([tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT])$") ) {
    value = RegExp.$2;
    dict = "ruigo";
  }
else if (value.match("^([tT][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][jJ])$") ) {
    value = RegExp.$2;
    dict = "ruigo";
  }
else if (value.match("^([jJ][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][tT])$") ) {
    value = RegExp.$2;
    dict = "ruigo";
  }
else if (value.match("^([yY][kK])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([yY][kK])$") ) {
    value = RegExp.$2;
    dict = "yakugo";
  }
else if (value.match("^([yY])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([yY])$") ) {
    value = RegExp.$2;
    dict = "Yahoo";
  }
else if (value.match("^([gG][pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][pP])$") ) {
    value = RegExp.$2;
    dict = "Google-phrase";
  }
else if (value.match("^([gG][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][tT])$") ) {
    value = RegExp.$2;
    dict = "Google-towa";
  }
else if (value.match("^([gG][dD])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][dD])$") ) {
    value = RegExp.$2;
    dict = "Google-define";
  }
else if (value.match("^([gG][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][jJ])$") ) {
    value = RegExp.$2;
    dict = "Google-japanese";
  }
else if (value.match("^([gG][mM])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][mM])$") ) {
    value = RegExp.$2;
    dict = "Google-maps";
  }
else if (value.match("^([mM])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([mM])$") ) {
    value = RegExp.$2;
    dict = "Google-maps";
  }
else if (value.match("^([mM][aA][pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([mM][aA][pP])$") ) {
    value = RegExp.$2;
    dict = "Google-maps";
  }
else if (value.match("^(地図)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(地図)$") ) {
    value = RegExp.$2;
    dict = "Google-maps";
  }
else if (value.match("^(地)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(地)$") ) {
    value = RegExp.$2;
    dict = "Google-maps";
  }
else if (value.match("^([gG][iI])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][iI])$") ) {
    value = RegExp.$2;
    dict = "Google-image";
  }
else if (value.match("^([pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([pP])$") ) {
    value = RegExp.$2;
    dict = "Google-image";
  }
else if (value.match("^(画像)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(画像)$") ) {
    value = RegExp.$2;
    dict = "Google-image";
  }
else if (value.match("^(絵)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(絵)$") ) {
    value = RegExp.$2;
    dict = "Google-image";
  }
else if (value.match("^([aA])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([aA])$") ) {
    value = RegExp.$2;
    dict = "AmazonJuggler";
  }
else if (value.match("^([aA][aA])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([aA][aA])$") ) {
    value = RegExp.$2;
    dict = "AmazonAuthor";
  }
else if (value.match("^([aA][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([aA][tT])$") ) {
    value = RegExp.$2;
    dict = "AmazonTitle";
  }
else if (value.match("^([aA][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([aA][jJ])$") ) {
    value = RegExp.$2;
    dict = "Amazon-Japan";
  }
else if (value.match("^([aA][uU])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([aA][uU])$") ) {
    value = RegExp.$2;
    dict = "Amazon-com";
  }
else if (value.match("^([wW])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([wW])$") ) {
    value = RegExp.$2;
    dict = "Weblio";
  }
else if (value.match("^([kK][aA][iI])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([kK][aA][iI])$") ) {
    value = RegExp.$2;
    dict = "shokenkaikei";
  }
else if (value.match("^(会計)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(会計)$") ) {
    value = RegExp.$2;
    dict = "shokenkaikei";
  }
else if (value.match("^([iI][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([iI][tT])$") ) {
    value = RegExp.$2;
    dict = "e-words";
  }
else if (value.match("^([fF][lL])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([fF][lL])$") ) {
    value = RegExp.$2;
    dict = "flickr";
  }
else if (value.match("^([yY][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([yY][tT])$") ) {
    value = RegExp.$2;
    dict = "YouTube";
  }
else if (value.match("^([wW][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([wW][jJ])$") ) {
    value = RegExp.$2;
    dict = "Wikipedia-j";
  }
else if (value.match("^([wW][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([wW][eE])$") ) {
    value = RegExp.$2;
    dict = "Wikipedia-e";
  }
else if (value.match("^([kK][aA])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([kK][aA])$") ) {
    value = RegExp.$2;
    dict = "kanji";
  }
else if (value.match("^(漢字)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(漢字)$") ) {
    value = RegExp.$2;
    dict = "kanji";
  }
else if (value.match("^(漢)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(漢)$") ) {
    value = RegExp.$2;
    dict = "kanji";
  }
else if (value.match("^([eE][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][eE])$") ) {
    value = RegExp.$2;
    dict = "english-english";
  }
else if (value.match("^([tT][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][eE])$") ) {
    value = RegExp.$2;
    dict = "english-thesaurus";
  }
else if (value.match("^([eE][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][tT])$") ) {
    value = RegExp.$2;
    dict = "english-thesaurus";
  }
else if (value.match("^([jJ][zZ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][zZ])$") ) {
    value = RegExp.$2;
    dict = "zip-japan";
  }
else if (value.match("^([jJ][pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][pP])$") ) {
    value = RegExp.$2;
    dict = "zip-japan";
  }
else if (value.match("^(〒)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(〒)$") ) {
    value = RegExp.$2;
    dict = "zip-japan";
  }
else if (value.match("^(郵便)[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+(郵便)$") ) {
    value = RegExp.$2;
    dict = "zip-japan";
  }
else if (value.match("^([aA][nN])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([aA][nN])$") ) {
    value = RegExp.$2;
    dict = "Answer-com";
  }
else if (value.match("^([jJ][cC])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][cC])$") ) {
    value = RegExp.$2;
    dict = "japanese-chinese";
  }
else if (value.match("^([cC][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([cC][jJ])$") ) {
    value = RegExp.$2;
    dict = "chinese-japanese";
  }
else if (value.match("^([jJ][kK])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([jJ][kK])$") ) {
    value = RegExp.$2;
    dict = "japanese-korean";
  }
else if (value.match("^([kK][jJ])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([kK][jJ])$") ) {
    value = RegExp.$2;
    dict = "korean-japanese";
  }
else if (value.match("^([eE][kK])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][kK])$") ) {
    value = RegExp.$2;
    dict = "english-korean";
  }
else if (value.match("^([kK][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([kK][eE])$") ) {
    value = RegExp.$2;
    dict = "english-korean";
  }
else if (value.match("^([eE][cC])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][cC])$") ) {
    value = RegExp.$2;
    dict = "english-chinese";
  }
else if (value.match("^([cC][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([cC][eE])$") ) {
    value = RegExp.$2;
    dict = "english-chinese";
  }
else if (value.match("^([eE][gG])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][gG])$") ) {
    value = RegExp.$2;
    dict = "english-german";
  }
else if (value.match("^([gG][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][eE])$") ) {
    value = RegExp.$2;
    dict = "english-german";
  }
else if (value.match("^([eE][fF])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][fF])$") ) {
    value = RegExp.$2;
    dict = "english-french";
  }
else if (value.match("^([fF][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([fF][eE])$") ) {
    value = RegExp.$2;
    dict = "french-english";
  }
else if (value.match("^([eE][iI])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][iI])$") ) {
    value = RegExp.$2;
    dict = "english-italian";
  }
else if (value.match("^([iI][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([iI][eE])$") ) {
    value = RegExp.$2;
    dict = "italian-english";
  }
else if (value.match("^([eE][sS])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([eE][sS])$") ) {
    value = RegExp.$2;
    dict = "english-spanish";
  }
else if (value.match("^([sS][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([sS][eE])$") ) {
    value = RegExp.$2;
    dict = "spanish-english";
  }
else if (value.match("^([yY][sS])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([yY][sS])$") ) {
    value = RegExp.$2;
    dict = "yahoo-shopping";
  }
else if (value.match("^([cC][oO])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([cC][oO])$") ) {
    value = RegExp.$2;
    dict = "cookpad";
  }
else if (value.match("^([wW][eE])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([wW][eE])$") ) {
    value = RegExp.$2;
    dict = "weather";
  }
else if (value.match("^([tT][rR])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][rR])$") ) {
    value = RegExp.$2;
    dict = "transportation";
  }
else if (value.match("^([hH][tT])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([hH][tT])$") ) {
    value = RegExp.$2;
    dict = "tohoho-html";
  }
else if (value.match("^([hH][tT][mM][lL])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([hH][tT][mM][lL])$") ) {
    value = RegExp.$2;
    dict = "tohoho-html";
  }
else if (value.match("^([cC][sS])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([cC][sS])$") ) {
    value = RegExp.$2;
    dict = "css";
  }
else if (value.match("^([cC][sS][sS])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([cC][sS][sS])$") ) {
    value = RegExp.$2;
    dict = "css";
  }
else if (value.match("^([tT][jJ][sS])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([tT][jJ][sS])$") ) {
    value = RegExp.$2;
    dict = "tohoho-javascript";
  }
else if (value.match("^([pP][hH][pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([pP][hH][pP])$") ) {
    value = RegExp.$2;
    dict = "PHP";
  }
else if (value.match("^([pP][lL])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([pP][lL])$") ) {
    value = RegExp.$2;
    dict = "Perl";
  }
else if (value.match("^([pP][eE][rR][lL])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([pP][eE][rR][lL])$") ) {
    value = RegExp.$2;
    dict = "Perl";
  }
else if (value.match("^([gG][cC])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([gG][cC])$") ) {
    value = RegExp.$2;
    dict = "Google-code";
  }
else if (value.match("^([yY][pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([yY][pP])$") ) {
    value = RegExp.$2;
    dict = "yippy";
  }
else if (value.match("^([oO][pP])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([oO][pP])$") ) {
    value = RegExp.$2;
    dict = "open";
  }
else if (value.match("^([oO][pP][eE][nN])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([oO][pP][eE][nN])$") ) {
    value = RegExp.$2;
    dict = "open";
  }
else if (value.match("^([rR][uU][nN])[ 　]+(.*)$" )
     || value.match("^()(.*)[ 　]+([rR][uU][nN])$") ) {
    value = RegExp.$2;
    dict = "open";
  }
/** END ** 
  Generated by convert-sitelist-to-djmini-js-shortcut.pl **/



  /* for copying
  else if (value.match("^([][])[ 　]+(.*)$") ) {
    value = RegExp.$2;
    dict = "";
  }
  */


  /*
  else if (value.match("^〒?([0-9０-９]{3}-[0-9０-９]{4})$")) {
    dict = defaultZipMap;
    value = RegExp.$1;
  }
  */

//*** debug1
//  log("dict=", dict);
  
//  log("value=" + value);

  if (dict == "Guessing") {
    if (value.match("^[ 　	]*〒?([0-9０-９]{3}-[0-9０-９]{4})[ 　	]*$") )  {
	// log("郵便番号");
	dict = defaultZipMap;
	value = RegExp.$1;
	//郵便番号
	; // 下の方でマッチするが、計算と思われないようにここで一旦マッチ。
      }
    else if (value.match(calcRegexp)) {
      dict = "Google";
      // log(dict + ": " + value);
      value = value.replace(/ー/g, "-");
      // log(value);
    }

    else if (value.match("^[- a-zA-Z0-9']+$")) {
      dict = defaultEJDict;
    }
    else if (value.match("^(.+)とは$")) {
      dict = "Google-towa";
      value = RegExp.$1;
    }
    else if (value.match("([^ ]{2,3}[都道府県].+[区市群町村].*)$")) {
      //    else if (value.match("([^ 　	]{2,3}[都道府県].+[区市群町村].*|([^ 　	]{1,10}+[区市群町村].+[1-9１-９一-九].*)$")) {
      dict = "Google-maps";
      value = RegExp.$1;
    }
    else if (value.match("(\"[^\"]+\")$")) {
      dict = "Google";
      value = RegExp.$1;
    }
    else {
      dict = "Google";
    }
  }

  log(dict + ":" + value);
  return { 'dict': dict, 'searchString': value }; //Objectをreturn

}



function keydown (event, input) {
  //  document.getElementById("searchString").value = event.keyCode;
  //   dictJugglerSearchString (input.value);
  //  return;

  if (event.keyCode == 13 || event.keyCode == 33) {
    dictJugglerSearchString(document.getElementById("searchString").value);
  }
  // document.getElementById("searchString").value = event.keyCode;
}



// いまのところ 翻訳訳語辞典用は別なので注意
function escape_utf8(data) {
  if (data == '' || data == null) {
    return '';
  }

  data = data.toString();
  var buffer = '';
  for (var i=0; i<data.length; i++) {
    var c = data.charCodeAt(i);
    if (c <=0x80) {
      // print (" escape_utf8 data=" + data);
      buffer += data.substr(i,1);
      continue;
    }
    // log(c);
    var bs = new Array();
    if (c > 0x10000) { // ４バイトデータ
      bs[0] = 0xF0 | ((c & 0x1C0000) >>> 18);
      bs[1] = 0x80 | ((c & 0x3F000) >>> 12);
      bs[2] = 0x80 | ((c & 0xFC0) >>> 6);
      bs[3] = 0x80 | (c & 0x3F);
    }
    else if (c > 0x800) { // ４バイトデータ
      bs[0] = 0xE0 | ((c & 0xF000) >>> 12);
      bs[1] = 0x80 | ((c & 0xFC0) >>> 6);
      bs[2] = 0x80 | (c & 0x3F);
    }
    else if (c > 0x80) { // 2 バイトデータ
      bs[0] = 0xC0 | ((c & 0x7C0) >>> 6);
      bs[1] = 0x80 | (c & 0x3F);
    }
    else { // １バイトデータ
      // log(c);
      bs[0] = c;
    }
    if (bs[0]<0x80) {
      buffer += bs[0];
    }
    else {
      for (var j=0; j<bs.length; j++) {
	var b = bs[j];
	var hex = nibble_to_hex((b & 0xF0) >>> 4) + nibble_to_hex(b &0x0F);
	buffer += hex;
      }
    }
  }
  return buffer;
}


function yakugoEscape_utf8(data) {
  if (data == '' || data == null) {
    return '';
  }

  data = data.toString();
  var buffer = '';
  for (var i=0; i<data.length; i++) {
    var c = data.charCodeAt(i);
    var bs = new Array();
    if (c > 0x10000) {
      // 4 bytes
      bs[0] = 0xF0 | ((c & 0x1C0000) >>> 18);
      bs[1] = 0x80 | ((c & 0x3F000) >>> 12);
      bs[2] = 0x80 | ((c & 0xFC0) >>> 6);
      bs[3] = 0x80 | (c & 0x3F);
    }
    else if (c > 0x800) {
      // 3 bytes
      bs[0] = 0xE0 | ((c & 0xF000) >>> 12);
      bs[1] = 0x80 | ((c & 0xFC0) >>> 6);
      bs[2] = 0x80 | (c & 0x3F);
    }
    else if (c > 0x80) {
      // 2 bytes
      bs[0] = 0xC0 | ((c & 0x7C0) >>> 6);
      bs[1] = 0x80 | (c & 0x3F);
    }
    else {
      // 1 byte
      bs[0] = c;
    }
    for (var j=0; j<bs.length; j++) {
      var b = bs[j];
      var hex = nibble_to_hex((b & 0xF0) >>> 4)
	+ nibble_to_hex(b &0x0F);buffer += '%'+hex;
    }
  }
  return buffer;
}


function nibble_to_hex(nibble) {
  var chars = '0123456789ABCDEF';
  return chars.charAt(nibble);
}

// 全角英数字をすべて半角に。white spaceの連続を１文字のスペースに

function normalize(string) {
//  log("in normalize; original=" + string);
  string = string.replace(/^[\t 　]+/g, "");
  string = string.replace(/[\t 　]+$/g, "");
  string = string.replace(/[\t 　]+/g, " ");
  string = string.replace(/０/g, "0");
  string = string.replace(/１/g, "1");
  string = string.replace(/２/g, "2");
  string = string.replace(/３/g, "3");
  string = string.replace(/４/g, "4");
  string = string.replace(/５/g, "5");
  string = string.replace(/６/g, "6");
  string = string.replace(/７/g, "7");
  string = string.replace(/８/g, "8");
  string = string.replace(/９/g, "9");


  string = string.replace(/Ａ/g, "A");
  string = string.replace(/Ｂ/g, "B");
  string = string.replace(/Ｃ/g, "C");
  string = string.replace(/Ｄ/g, "D");
  string = string.replace(/Ｅ/g, "E");
  string = string.replace(/Ｆ/g, "F");
  string = string.replace(/Ｇ/g, "G");
  string = string.replace(/Ｈ/g, "H");
  string = string.replace(/Ｉ/g, "I");
  string = string.replace(/Ｊ/g, "J");
  string = string.replace(/Ｋ/g, "K");
  string = string.replace(/Ｌ/g, "L");
  string = string.replace(/Ｍ/g, "M");
  string = string.replace(/Ｎ/g, "N");
  string = string.replace(/Ｏ/g, "O");
  string = string.replace(/Ｐ/g, "P");
  string = string.replace(/Ｑ/g, "Q");
  string = string.replace(/Ｒ/g, "R");
  string = string.replace(/Ｓ/g, "S");
  string = string.replace(/Ｔ/g, "T");
  string = string.replace(/Ｕ/g, "U");
  string = string.replace(/Ｖ/g, "V");
  string = string.replace(/Ｗ/g, "W");
  string = string.replace(/Ｘ/g, "X");
  string = string.replace(/Ｙ/g, "Y");
  string = string.replace(/Ｚ/g, "Z");

  string = string.replace(/ａ/g, "a");
  string = string.replace(/ｂ/g, "b");
  string = string.replace(/ｃ/g, "c");
  string = string.replace(/ｄ/g, "d");
  string = string.replace(/ｅ/g, "e");
  string = string.replace(/ｆ/g, "f");
  string = string.replace(/ｇ/g, "g");
  string = string.replace(/ｈ/g, "h");
  string = string.replace(/ｉ/g, "i");
  string = string.replace(/ｊ/g, "j");
  string = string.replace(/ｋ/g, "k");
  string = string.replace(/ｌ/g, "l");
  string = string.replace(/ｍ/g, "m");
  string = string.replace(/ｎ/g, "n");
  string = string.replace(/ｏ/g, "o");
  string = string.replace(/ｐ/g, "p");
  string = string.replace(/ｑ/g, "q");
  string = string.replace(/ｒ/g, "r");
  string = string.replace(/ｓ/g, "s");
  string = string.replace(/ｔ/g, "t");
  string = string.replace(/ｕ/g, "u");
  string = string.replace(/ｖ/g, "v");
  string = string.replace(/ｗ/g, "w");
  string = string.replace(/ｘ/g, "x");
  string = string.replace(/ｙ/g, "y");
  string = string.replace(/ｚ/g, "z");

  // log("string=" + string);
  return string;
}

function say(string) {
  if (isMacOSXWidget) {
    widget.system("/usr/bin/say " + string, null );
  }
  else {
    speak(string);
  }
}

function run(string) {
  if (isMacOSXWidget) {
    var error = widget.system("/usr/bin/open " + string, null).errorString;
    return error;
  }
  else if (isYahooWidgetForMac) {
    var output = runCommand("/usr/bin/open " + string);
    if (output == "") {
      return undefined;
    }
    else {
      return output;
    }
  }
  else {
    ;
    return null;
  }
}

function getCurrentTimeString (date) {
  //  alert( date.getYear() );
  var year = date.getFullYear();
  var year2 = year - 2000;
  if (year2 == 0) {
    year2 = "00";
  }
  else if (year2 < 10)  {
    year2 = "0" + year2;
  }
  var jyear = year-1988;
  var month = date.getMonth() + 1;
  //log( "month=" + month);

  var mydate = date.getDate();
  var hour = date.getHours();
  if (12 < hour) {
    hour -= 12;
  }
    if (hour <= 9) {
      hour = "0" + hour;
    }
  var minute = date.getMinutes();
    if (minute <= 9) {
      minute = "0" + minute;
    }
  var dayOfTheWeek = getJapaneseDayOfTheWeek(date.getDay());
  var second = date.getSeconds();
  if (second <= 9) {
    second = "0" + second;
  }

  year2 = year - 2000;
  if (year2 < 10) {
    year2 = "0" + year2;
  }
  
  return hour + ":" + minute + "  " + month + "月" + mydate + "日 " + dayOfTheWeek + "曜 " + year + " H" + jyear;
  //  return hour + "時" + minute + "分 " + mydate + "日 " + dayOfTheWeek + "曜 " + year + " H" + jyear;
  //  return hour + ":" + minute + " " + mydate + "日 " + dayOfTheWeek + "曜 " + year + " H" + jyear;
  //  return hour + ":" + minute + " " + month + "/" + mydate + "（" + dayOfTheWeek + "） H" + jyear + " " + year;


  // return hour + ":" + minute + ":" + second + " " + month + "/" + mydate + " " + dayOfTheWeek + " " + year + " H" + jyear + "";

}

function getJapaneseDayOfTheWeek(num) {
  switch (num) {
  case 0:
    return "日";
    break;
  case 1:
    return "月";
    break;
  case 2:
    return "火";
    break;
  case 3:
    return "水";
    break;
  case 4:
    return "木";
    break;
  case 5:
    return "金";
    break;
  case 6:
    return "土";
    break;
  default:
    return "";
  }
}

function updateDateTimeDisplay() {
  // version 2.0  return;
  
  if (isYahooWidget) {
    if (preferences.dateTimePreference.value == "しない") {
      return;
    }
    date = new Date();
    searchString.data = getCurrentTimeString(date);
    GPreviousDateTimeString = searchString.data;
    //      searchString.select(0, -1)
    // dateTime.data = getCurrentTimeString(date);
    delete date;
  }
  else { // mac dashboard
    date = new Date();
    // document.getElementById("datetime").value = getCurrentTimeString(date);
    document.getElementById("datetime").innerHTML =
      '<div style="text-align: center; color: ' + GTimeColor + ';">' + getCurrentTimeString(date) +
      "</div>";
    delete date;
    timerID = setTimeout("updateDateTimeDisplay()", 1000*GTimeUpdateInterval);
    GTimerRunning = true;
  }
}


// この関数は、convert-filename.plのsplitFilenameWithSlash と同じように動作しな
// ければならないので注意。そうしないと、検索がマッチしなくなる
function splitFilenameWithSlash(originalEncodedName) {
  // Joliet規格ではファイル名が64以内なのでこれ以内にする 8/10/2006

  var dir1;
  var dir2;
  var stem;

  var asciiRegexp = new RegExp("^[0-7]");

  if (originalEncodedName.match(asciiRegexp)) {
    dir1 = "300";
    dir2 = "300";
    stem = originalEncodedName;
    if (originalEncodedName.length > 200) {
      stem = originalEncodedName.stem(0, 200);
    }
  }
  // new after 4/4/2007 (Wed)
  else if (originalEncodedName.length >= 12) {
    dir1 = originalEncodedName.substr(0,6);
    dir2 = originalEncodedName.substr(0,12);
    stem = originalEncodedName;
    if (originalEncodedName.length > 200) {
      stem = originalEncodedName.stem(0, 200);
    }
  }
  // １文字のもののために、このels ifも残す  old before 4/4/2007 (Wed)
  else if (originalEncodedName.length >= 6) {
    dir1 = originalEncodedName.substr(0,3);
    dir2 = originalEncodedName.substr(0,6);
    stem = originalEncodedName;
    if (originalEncodedName.length > 200) {
      stem = originalEncodedName.stem(0, 200);
    }
  }
  else {
    dir1 = originalEncodedName;
    dir2 = originalEncodedName;
    stem = originalEncodedName;
  }

  var returnValue = "data/" + dir1 + "/" + dir2 + ".html#" + stem;  
  return returnValue;


  /*
  if (originalEncodedName.length >= 112) { // 8/10/2006変更
    var dir1 = originalEncodedName.substr(0,55); 
    var dir2 = originalEncodedName.substr(55,55);
    var stem = originalEncodedName.substr(110, 56); // 実際これより長くはない
  }
  else if (originalEncodedName.length >= 64) {
    var dir1 = originalEncodedName.substr(0,30);
    var dir2 = originalEncodedName.substr(30,30);
    var stem = originalEncodedName.substr(60);
  }
  // 旧バージョン
  //  if (originalEncodedName.length >= 90) {
  //    var dir1 = originalEncodedName.substr(0,30);
  //    var dir2 = originalEncodedName.substr(30,30);
  //    var stem = originalEncodedName.substr(60,30);
  //}
  else if (originalEncodedName.length >= 8) {
    var dir1 = originalEncodedName.substr(0,3);
    var dir2 = originalEncodedName.substr(3,3);
    var stem = originalEncodedName.substr(6);
  }
  else if (originalEncodedName.length >= 5) {
    var dir1 = originalEncodedName.substr(0,3);
    var dir2 = "000";
    var stem = originalEncodedName.substr(3);
  }
  else {
    dir1 = "000";
    dir2 = "000";
    stem = originalEncodedName;
  }

  var returnValue = "data/" + dir1 + "/" + dir2 + ".html#" + stem;  
  //  var returnValue = "data/" + dir1 + "/" + dir2 + "/" + stem  + ".html";
  return returnValue;

  */
}


function yakugoSplitFilenameWithSlash(originalEncodedName) {
  // Joliet規格ではファイル名が64以内なのでこれ以内にする 8/10/2006
  if (originalEncodedName.length >= 112) { // 8/10/2006変更
    var dir1 = originalEncodedName.substr(0,55); 
    var dir2 = originalEncodedName.substr(55,55);
    var stem = originalEncodedName.substr(110, 56); // 実際これより長くはない
  }
  else if (originalEncodedName.length >= 64) {
    var dir1 = originalEncodedName.substr(0,30);
    var dir2 = originalEncodedName.substr(30,30);
    var stem = originalEncodedName.substr(60);
  }
  // 旧バージョン
  //  if (originalEncodedName.length >= 90) {
  //    var dir1 = originalEncodedName.substr(0,30);
  //    var dir2 = originalEncodedName.substr(30,30);
  //    var stem = originalEncodedName.substr(60,30);
  //}
  else if (originalEncodedName.length >= 8) {
    var dir1 = originalEncodedName.substr(0,3);
    var dir2 = originalEncodedName.substr(3,3);
    var stem = originalEncodedName.substr(6);
  }
  else if (originalEncodedName.length >= 5) {
    var dir1 = "000";
    var dir2 = originalEncodedName.substr(0,3);
    var stem = originalEncodedName.substr(3);
  }
  else {
    dir1 = "000";
    dir2 = "000";
    stem = originalEncodedName;
  }
  
  var returnValue = "data/" + dir1 + "/" + dir2 + "/" + stem  + ".html";
  log("encoded path=" + returnValue);
  return returnValue;
}

function log (value) {
//  alert(value);
  return;

//  var answer = confirm(value);
//  if (!answer) {
//    exit; // ワザとエラーを起こす
//  }
//  print(value);
}


function getBrowserType() {
  var agt　=　navigator.userAgent.toLowerCase();

  //alert(agt);
  if (agt.match("safari")) {
    return "safari";
    // mozilla/5.0 (macintosh; u; intel mac os x 10_6_4; en-us) applewebkit/534.3 (khtml, like gecko) chrome/6.0.472.53 safari/534.3
  }
  else if (agt.match("chrome")) {
    return "chrome";    
    // mozilla/5.0 (macintosh; u; intel mac os x 10_6_4; ja-jp) applewebkit/533.17.8 (khtml, like gecko) version/5.0.1 safari/533.17.8
  }
  else if (agt.match("firefox")) {
    return "firefox";
    // mozilla/5.0 (macintosh; u; intel mac os x 10.6; ja-jp-mac; rv:1.9.2.8) gecko/20100722 firefox/3.6.8 gtb7.1
  }
  else if (agt.match("msie")) {
    return "msie";
  }
  else if (agt.match("opera")) {
    return "opera";
  }
  return "unknown";
}



function ecofinDoSearchString(word) {
  location.href="./ecofin/index.php?word=" + word;
}

function environDoSearchString(word) {
  location.href="./environ/environ.php?word=" + word;
}



function print (value) {
  var answer = true;
  if (true) { // 
    answer = confirm(value);  // for compatibility with Yahoo! Widget
  }
  if (!answer) {
    openURL("dummy");
  }
}

