
var gShow=false;
var gBtnLock=false;
var gSelMapNum = -1;
var gClickNum = -1;
var gLastClickedDivID="";
var gLastWithinDivID="";

/*****
var gBodydivObj = null;
var gDivObj = null;

var gMapObj = null;
****/


/**************lib start********************/
function Is ()
{   // テストの簡易化のために全ての文字を小文字に統一します。 
    var agt=navigator.userAgent.toLowerCase()

    // --- ブラウザバージョン ---
    this.major = stringToNumber(navigator.appVersion)
    this.minor = parseFloat(navigator.appVersion)

    this.nav  = ((agt.indexOf('mozilla')!=-1) && ((agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1)))
    this.nav2 = (this.nav && (this.major == 2))
    this.nav3 = (this.nav && (this.major == 3))
    this.nav4 = (this.nav && (this.major == 4))
	
	//Netscape 6
	this.nav5 =	(this.nav && (this.major == 5))
	this.nav6 = (this.nav && (this.major == 5))
	this.gecko = (this.nav && (this.major >= 5))

    this.ie   = (agt.indexOf("msie") != -1)
    this.ie3  = (this.ie && (this.major == 2))
    this.ie4  = (this.ie && (this.major == 3))
    this.ie5  = (this.ie && (this.major == 4))


    this.opera = (agt.indexOf("opera") != -1)
     
    this.nav4up = this.nav && (this.major >= 4)
    this.ie4up  = this.ie  && (this.major >= 4)
}

 //--イベント開始関数 
  function jsStartEvent(ojNameStr,eventTypeNameStr,funcNameStr){
    //n4,m1,n7,e4,e5,e6,o6,o7,s1,k3用
    eval(ojNameStr+".on"+eventTypeNameStr+"="+ funcNameStr)
    //n4用
    if(document.layers)
      eval(ojNameStr+".captureEvents(Event."
                 +eventTypeNameStr.toUpperCase()+")")
  }
  
  //--イベント停止関数 
  function jsStopEvent(ojNameStr,eventNameStr){
    //n4,m1,n7,e4,e5,e6,o6,07,s1,k3用
    eval(ojNameStr+".on"+eventNameStr+" = null")
    //n4用
    if(document.layers)
      eval(ojNameStr+".releaseEvents(Event."
                 +eventNameStr.toUpperCase()+")") 
  }

  //--対象オブジェクト名を取得
  //  (必ずonload後に実行すること)
  function jsGetLayOjStr(idName){
    if(document.getElementById)         //e5,e6,n6,n7,m1,o6,o7,s1用
      return "document.getElementById('"+idName+"')"
    else if(document.all)               //e4用
      return "document.all('"+idName+"')"
    else if(document.layers)            //n4用
      return "document.layers['"+idName+"']"
  }

var is = new Is();


// ブラウザのベンダー/バージョン/OS に依存するマークアップを動的/条件付で手軽に 
// 生成するための関数集です。 


// document.write("文字列");  とタイプする手間を省きます。 
// 第2引数(省略可) minVersion が渡されると、それ以降のバージョンで、 
// 第3引数(省略可) maxVersion が渡されると、それ以前のバージョンでのみ実行します。 

function dw(str, minVersion, maxVersion)
{   if ( ((dw.arguments.length < 3) || (is.major <= maxVersion)) 
         && ((dw.arguments.length < 2) || (is.major >= minVersion)))
    document.write(str)  
}


// document write boolean
// if (条件) document.write("文字列");  とタイプする手間を省きます。 
// 第2引数(省略可) aBoolean が真の時のみ document.write("文字列"); します。 

function dwb (str, aBoolean)
{   if  ((dwb.arguments.length < 2) || aBoolean)
    document.write(str)  
}



// string version
// バージョンによって str か "" を返します。 
// 第2引数(省略可) minVersion が渡されると、それ以降のバージョンで、 
// 第3引数(省略可) maxVersion が渡されると、それ以前のバージョンで str を返します。 

function sv(str, minVersion, maxVersion)
{   if ( ((sv.arguments.length < 3) || (is.major <= maxVersion)) 
         && ((sv.arguments.length < 2) || (is.major >= minVersion)))
    return str;
    else return "";
}


// string boolean
// (条件)?"文字列":""  とタイプする手間を省きます。 
// 第2引数(省略可) aBoolean が真の時のみ str を返します。 

function sb (str, aBoolean)
{   if  ((sb.arguments.length < 2) || aBoolean)
    return str;
    else return "";
}

function layerClipOrder (cssClipString)
{  var commaPos = cssClipString.lastIndexOf(",");
   return (cssClipString.substring(commaPos+1) + "," + cssClipString.substring(0,commaPos));
}

function genElt (name, content, left, top, z, width, height, visibility, 
                 backgroundColor, backgroundImage, clip, relative, 
                 hideEltOnOlderBrowsers, useDivInsteadOfLayer, classname) 
{ var markup = "";
  if (is.gecko)
  {
    markup = '<DIV ID="' + name + '"' +  
        ((classname)?' CLASS="' + classname + '"':'') + 
        ' STYLE="position:' + ((relative)?'relative;':'absolute;') + 
        ' overflow:none;' + 
        ((left)?' left:' + left + 'px;':'') + 
        ((top)?' top:' + top + 'px;':'') + 
        ((height)?' height:' + height + 'px;':'') + 
        ((width)?' width:' + width + 'px;':'') + 
        ((visibility && (visibility!='')) ? ' visibility:' + visibility + ';' : '') + 
        ((z)?' z-index:' + z + ';':'') + 
        ((backgroundColor)?' background-color:' + backgroundColor + ';':'') + 
        ((backgroundImage)?' background-image:url("' + backgroundImage + '");':'') +  
        ((clip)?' clip:rect("' + clip + '");':'') + 
        '">' + ((content)?content:'') + '</DIV>';
  }

  else if (is.nav && (is.major == 4 || !hideEltOnOlderBrowsers) && 
      !useDivInsteadOfLayer)
  { var tagname = (relative)?'ILAYER':'LAYER';
    if (visibility && (visibility!=''))
    {  if (visibility=="hidden") visibility = "hide";
       else if (visibility=="visible") visibility = "show";
    }
    markup = '<' + tagname + ' ID="' + name + '"' + ((classname)?' CLASS="' + 
        classname + '"':'') + ((left)?' LEFT="' + left + '"':'') + 
        ((top)?' TOP="' + top + '"':'') + ((width)?' WIDTH="' + width + '"':'') + 
        ((height)?' HEIGHT="' + height + '"':'') + 
        ((visibility && (visibility!='')) ? ' VISIBILITY="' + visibility + '"' : '') + 
        ((z)?' Z-INDEX="' + z + '"':'') + 
        ((backgroundColor)?' BGCOLOR="' + backgroundColor + '"':'') + 
        ((backgroundImage)?' BACKGROUND="' + backgroundImage + '"':'') +  
        ((clip)?' CLIP="' + layerClipOrder(clip) + '"':'') + 
        '>' + ((content)?content:'') + '</' + tagname + '>';
  }
 
  else if ((is.ie || (is.nav && useDivInsteadOfLayer)) && (is.major>=4 || !hideEltOnOlderBrowsers))
  { markup = '<DIV ID="' + name + '"' +  
        ((classname)?' CLASS="' + classname + '"':'') + 
        ' STYLE="position:' + ((relative)?'relative;':'absolute;') + 
        ' overflow:none;' + 
        ((left)?' left:' + left + 'px;':'') + 
        ((top)?' top:' + top + 'px;':'') + 
        ((height)?' height:' + height + 'px;':'') + 
        ((width)?' width:' + width + 'px;':'') + 
        ((visibility && (visibility!='')) ? ' visibility:' + visibility + ';' : '') + 
        ((z)?' z-index:' + z + ';':'') + 
        ((backgroundColor)?' background-color:' + backgroundColor + ';':'') + 
        ((backgroundImage)?' background-image:url("' + backgroundImage + '");':'') +  
        ((clip)?' clip:rect("' + clip + '");':'') + 
        '">' + ((content)?content:'') + '</DIV>';
  }

  return markup;
}

function writeElt (name, content, left, top, z, width, height, visibility, 
                   backgroundColor, backgroundImage, clip, relative, 
                   hideEltOnOlderBrowsers, useDivInsteadOfLayer, classname) 
{ if (writeElt.arguments.length < 15) classname = false;
  if (writeElt.arguments.length < 14) useDivInsteadOfLayer = false;
  if (writeElt.arguments.length < 13) hideEltOnOlderBrowsers = false;
  if (writeElt.arguments.length < 12) relative = false;
  if (writeElt.arguments.length < 11) clip = false;
  if (writeElt.arguments.length < 10) backgroundImage = false;
  if (writeElt.arguments.length < 9) backgroundColor = false;
  if (writeElt.arguments.length < 8) visibility = false;
  if (writeElt.arguments.length < 7) height = false;
  if (writeElt.arguments.length < 6) width = false;
  if (writeElt.arguments.length < 5) z = false;
  if (writeElt.arguments.length < 4) top = false;
  if (writeElt.arguments.length < 3) left = false;
  if (writeElt.arguments.length < 2) content = false;
  document.write (genElt (name, content, left, top, z, width, height, visibility, 
                    backgroundColor, backgroundImage, clip, relative, 
                 hideEltOnOlderBrowsers, useDivInsteadOfLayer, classname));
}


/*     呼び出し構文
   それぞれの名前は要素の id 属性値または layer タグの name 属性値の文字列

   getElt (最上位要素名, 第１入れ小要素名, 第２入れ小要素名 ...
                 目的の要素名)

   トップレベル要素を取得する例：
   var fooElement = getElt ("foo")

   ネストした要素を取得する例：
   var fooElement = getElt ("bar", "baz", "foo")
    ･･･ baz は foo を含んでいる親で、bar はトップレベル要素で、baz を含む親
*/




function getElt () 
{
 if (is.nav4)
  {
    var currentLayer = document.layers[getElt.arguments[0]];
    for (var i=1; i<getElt.arguments.length && currentLayer; i++)
    {   currentLayer = currentLayer.document.layers[getElt.arguments[i]];
    }
    return currentLayer;
  } 
  else if(document.getElementById && document.getElementsByName)
  { 
    var name = getElt.arguments[getElt.arguments.length-1];
    if(document.getElementById(name))                      //最初は id で 
       return document.getElementById(name);
    else if (document.getElementsByName(name))             //見つからなければ次は name で 
	   return document.getElementsByName(name)[0];
  }
  else if (is.ie4up) {
    var elt = eval('document.all.' + getElt.arguments[getElt.arguments.length-1]);
    return(elt);
  }

}

function showElt(elt)
{
	setEltVisibility(elt,'visible');
}

function hideElt(elt)
{
	setEltVisibility(elt,'hidden');
}

function showEltById(idname)
{
	showElt( getElt(idname) );
}

function hideEltById(idname)
{
	hideElt( getElt(idname) );
}


/* value は "visible", "hidden", "inherit" のいずれかでなければならない。
   これらの値が Nav4, Gecko, IE で共通して visibility の設定に利用できる。
*/
function setEltVisibility (elt, value)
{  if (is.nav4) elt.visibility = value;
   else if (elt.style) elt.style.visibility = value;
}


/* 返り値は"visible", "hidden", "inherit" のいずれかの文字列。
   この値は CSS1 や IE4 のものに合わせてあり、3つのブラウザ全てで設定可能なもの
   です。Nav4 はデフォルトでは "show" と "hide" を返すので、ブラウザ間で一貫した
   値を返すために、それぞれ "visible" と "hidden" に書き換えています。
*/
function getEltVisibility (elt)
{  if (is.nav4) 
   {  var value = elt.visibility;
      if (value == "show") return "visible";
      else if (value == "hide") return "hidden";
      else return value;
   }
   else if (elt.style) return elt.style.visibility;
}

function getEltVisibilityById(idname){
	return (getEltVisibility(getElt(idname)));
}


/* elt をそれが置かれた座標系での x,y ピクセル位置に移動させる。トップレベル要素
   ではウィンドウ表示領域座標系に、絶対位置指定の親要素でネストした要素では親要素
   の座標系になります。
*/
function moveEltTo (elt, x, y) 
{ if (is.nav4) elt.moveTo(x, y);
  else if (is.ie4up) {
    elt.style.pixelLeft = x;
    elt.style.pixelTop  = y;
  }
  else if (is.gecko) {
    elt.style.left = x;
    elt.style.top  = y;
  }
}


/* elt のオフセット位置を x,y のピクセル値で指定する。 */

function moveEltBy (elt, x, y) 
{ if (is.nav4) elt.moveBy(x, y);
  else if (is.ie4up)  {
    elt.style.pixelLeft += x;
    elt.style.pixelTop  += y;
  }
  else if (is.gecko)  {
    elt.style.left = (stringToNumber(elt.style.left) + x + "px");
    elt.style.top  = (stringToNumber(elt.style.top)  + y + "px");
  }
}



function jsGetMouseX(e){
	if(window.opera) 
		return e.clientX;
	else if(document.all)   
		return document.body.scrollLeft+event.clientX;
	else if(document.layers||document.getElementById)
		return e.pageX;
}

function jsGetMouseY(e){
	if(window.opera) 
		return e.clientY;
	else if(document.all) 
		return document.body.scrollTop+event.clientY;
	else if(document.layers||document.getElementById)
		return e.pageY;
}


/* Nav4 の pageX と同機能のクロスブラウザ関数。 */
function getEltPageLeft(elt) {
  var x;

  if (is.nav4)
    return elt.pageX;
  if (is.ie4up) {
    x = 0;
    while (elt.offsetParent != null) {
      x += elt.offsetLeft;
      elt = elt.offsetParent;
    }
    x += elt.offsetLeft;
    return x;
  }
  if (is.gecko) {
    x = 0;
    while (elt.offsetParent != null) {
      x += elt.offsetLeft;
      elt = elt.offsetParent;
    }
    x += elt.offsetLeft;
    return x;
  }
  return -1;
}

/* Nav4 の pageY と同機能のクロスブラウザ関数。 */
function getEltPageTop(elt) {
  var y;

  if (is.nav4)
    return elt.pageY;
  if (is.ie4up) {
    y = 0;
    while (elt.offsetParent != null) {
      y += elt.offsetTop;
      elt = elt.offsetParent;
    }
    y += elt.offsetTop;
    return y;
  }
  if (is.gecko) {
    y = 0;
    while (elt.offsetParent != null) {
      y += elt.offsetTop;
      elt = elt.offsetParent;
    }
    y += elt.offsetTop;
    return y;
  }
  return -1;
}

// divの中のlocal座標 x (element,event)
function getLocalMouseX(elt,evt){
	return( jsGetMouseX(evt) - getEltPageLeft(elt) );
}

// divの中のlocal座標 y (element,event)
function getLocalMouseY(elt,evt){
	return( jsGetMouseY(evt) - getEltPageTop(elt) );
}

/* elt の左端位置をピクセル値で指定する。 */
function setEltLeft (elt, x) {
  if (is.nav4)     elt.left=x;
  else if (is.ie4up) elt.style.pixelLeft=x;
  else if (is.gecko) elt.style.left = (x + "px");
}


/* elt の左端位置をピクセル値で返す。 */
function getEltLeft (elt) {
  if (is.nav4)     return (elt.left);
  else if (is.ie4up) return (elt.style.pixelLeft);
  else if (is.gecko) return stringToNumber(elt.style.left);
}

/* elt の上端位置をピクセル値で指定する。 */
function setEltTop (elt, y) 
{ if (is.nav4)     elt.top=y;
  else if (is.ie4up) elt.style.pixelTop=y;
  else if (is.gecko) elt.style.top= (y + "px");
}

/* elt の上端位置をピクセル値で返す。 */
function getEltTop (elt) 
{ if (is.nav4)     return (elt.top);
  else if (is.ie4up) return (elt.style.pixelTop);
  else if (is.gecko) return stringToNumber(elt.style.top);
}

/* elt の幅をピクセル値で返す。 */
function getEltWidth(elt) {

  if (is.nav4) {
    if (elt.document.width)
      return elt.document.width;
    else
      return elt.clip.right - elt.clip.left;
  }
  if (is.ie4up) {
    if (elt.style.pixelWidth)
      return elt.style.pixelWidth;

    else
      return elt.offsetWidth;
  }
  if (is.gecko) {
    if (elt.style.width)
      return stringToNumber(elt.style.width);
    else
      return stringToNumber(elt.offsetWidth);
  }
  return -1;
}

/* elt の幅をピクセル値で指定する。 */
function setEltWidth(elt,wdth)
{
	if(is.nav4)
    { 
	     elt.document.width = wdth;
    }
    else if(elt.style)
    { 
        elt.style.width = wdth;
    }
}

/* elt の高さをピクセル値で返す。 */
function getEltHeight(elt) {
  if (is.nav4) {
    if (elt.document.height)
      return elt.document.height;
    else
      return elt.clip.bottom - elt.clip.top;
  }
  if (is.ie4up) {
    if (elt.style.pixelHeight)
      return elt.style.pixelHeight;
    else
      return elt.clientHeight;
  }
  if (is.gecko) {
    if (elt.style.height)
      return stringToNumber(elt.style.height);
    else
      return stringToNumber(elt.offsetHeight);
  }
  return -1;
}

/* elt の高さをピクセル値で指定する。 */

function setEltHeight(elt,hght)
{
	if(is.nav4)
    { 
		elt.document.height = hght;
    }
    else if(elt.style)
    { 
        elt.style.height = hght;
    }
}

/* elt の切り抜き部分を指定する。
   注意：上右下左の順序は CSS に従ったもの。
   cliptop, clipright, clipbottom, clipleft は全て整数値で指定する。
*/
function setEltClip (elt, cliptop, clipright, clipbottom, clipleft) 
{ if (is.nav4) {
    elt.clip.left   = clipleft;
    elt.clip.top    = cliptop;
    elt.clip.right  = clipright;
    elt.clip.bottom = clipbottom;
  }
  else if (is.ie4up)  elt.style.clip = 'rect(' + cliptop + ' ' +  
       clipright + ' ' + clipbottom + ' ' + clipleft +')';
  else if (is.gecko)  elt.style.clip = 'rect(' + cliptop + ' ' +  
       clipright + ' ' + clipbottom + ' ' + clipleft +')';
}

/* IE の為だけの関数
   Nav3 でパースされても構文エラーにならないように、正規表現を用いていない。
*/
function tempClipObj (elt)
{  var clipStr = elt.style.clip;
  
   clipStr = clipStr.substring (clipStr.indexOf("(") + 1);
   this.top = stringToNumber(clipStr);
   clipStr = clipStr.substring (clipStr.indexOf(" ") + 1);
   this.right = stringToNumber(clipStr);
   clipStr = clipStr.substring (clipStr.indexOf(" ") + 1);
   this.bottom = stringToNumber(clipStr);
   clipStr = clipStr.substring (clipStr.indexOf(" ") + 1);
   this.left = stringToNumber(clipStr);
}

/* elt の切り抜き部分の左端をピクセル値で返す。 */
function getEltClipLeft (elt) 
{ if (is.nav4)     return (elt.clip.left);
  else if (elt.style) 
  {  var tempClip = new tempClipObj (elt);
     return tempClip.left;
  }
}

/* elt の切り抜き部分の上端をピクセル値で返す。 */
function getEltClipTop (elt) 
{ if (is.nav4)     return (elt.clip.top);
  else if (elt.style) 
  {  var tempClip = new tempClipObj (elt);
     return tempClip.top;
  }
}

/* elt の切り抜き部分の右端をピクセル値で返す。 */
function getEltClipRight (elt) {
  if (is.nav4)     return (elt.clip.right);
  else if (elt.style) 
  {  var tempClip = new tempClipObj (elt);
     return tempClip.right;
  }

}

/* elt の切り抜き部分の下端をピクセル値で返す。 */
function getEltClipBottom (elt) 
{ if (is.nav4)     return (elt.clip.bottom);
  else if (elt.style) 
  {  var tempClip = new tempClipObj (elt);
     return tempClip.bottom;
  }
}

/* elt の切り抜き部分の幅をピクセル値で返す。 */

function getEltClipWidth (elt) 
{
    return (getEltClipRight(elt) - getEltClipLeft(elt));
}


/* elt の切り抜き部分の高さをピクセル値で返す。 */

function getEltClipHeight (elt) 
{
    return (getEltClipBottom(elt) - getEltClipTop(elt));
}


/* 現在のウィンドウの表示領域の幅をピクセル値で返す。 */

function getCurrentWinWidth() 
{ if (is.nav4)     return(window.innerWidth);
  else if (is.ie4up) return(document.body.clientWidth);
  else if (is.gecko) return(window.innerWidth);
}



/* 現在のウィンドウの表示領域の高さをピクセル値で返す。 */
function getCurrentWinHeight() 
{ if (is.nav4)     return(window.innerHeight);
  else if (is.ie4up) return(document.body.clientHeight);
  else if (is.gecko) return(window.innerHeight);

}

/* elt の z-index (正の整数) を返す。  */

function getEltZIndex (elt) 
{ if (is.nav4) return(elt.zIndex);
  else if (elt.style) return (elt.style.zIndex);
}

/* elt の z-index を指定する。 z は正の整数。 */

function setEltZIndex (elt, z) 
{ if (is.nav4) elt.zIndex = z;
  else if (elt.style) elt.style.zIndex = z;
}


/* end CBDHTML derivative functions  */
/* elt の背景に設定する画像のパスを imageFilePath で指定する。

   注意：これと次の関数は Nav4/Gecko/IE4+ で要素の背景画像プロパティの取得と設定
   を可能にしますが、背景画像サポートの実装の違いから、同じ視覚効果を得るには
   HTML/CSS マークアップとその中身をかなり試行錯誤する必要があるかも知れません。
*/
function setEltBackgroundImage (elt, imageFilePath) 
{ if (is.nav4) elt.background.src = imageFilePath;
  else if (is.ie4up) elt.style.backgroundImage = "url(" + imageFilePath + ")";
  else if (is.gecko) elt.style.backgroundImage = "url(" + imageFilePath + ")";
}

/* elt の背景画像のパスまたは URL を返します。
   注意：返される文字列値は Navigator 4.x, Internet Explorer, Gecko で同じでは
   ありません。Navigator 4.x では
   "file:///F|/DHTML/xbdhtml/xbdhtml/images/redpole.gif"
   のような値が読み出せますが、Internet Explorer と Gecko では
   "url(images/redpole.gif)" のような値が読み出せるので、"images/redpole.gif"
   のような部分だけを切り取って返します。
*/

function getEltBackgroundImage (elt) 
{ if (is.nav4) return (elt.background.src);
  else if (elt.style) { 
     var theURL = elt.style.backgroundImage;
     if (typeof(theURL) == "string")
     {  var URLlen = theURL.length;
        return (theURL.substring (4, URLlen-1));
     }
     else return(theURL);
  }
}

/* elt の背景色を colorNumber に設定します。
   colorNumber は白を 0xffffff とするような整数表現の色か、"red"などの 16 の CSS1
   標準色名のいずれか。
   (Nav4 ではサポートされないので IE の拡張色名リストの文字列は使用しないこと)

   注意：CSS1 標準16色名 ("red"など) を設定した場合でも、getEltBackgroundColor
   では常に相当する整数コードが返されます。(例えば、"red" に対して 0xff0000)
   getEltBackgroundColor は IE4 や Gecko では自動的に色名から整数に変換し、Nav4
   ではブラウザ自体が変換を行うからです。
   文字列に設定したのに整数が返されるという混乱をさける為、色番号のみを用いるのが
   一番です。

   注意：これと次の関数は Nav4/Gecko/IE4+ で要素の背景色プロパティの取得と設定を
   可能にしますが、背景色サポートの実装の違いから、同じ視覚効果を得るには HTML/CSS
   マークアップとその中身をかなり試行錯誤する必要があるかも知れません。
*/

function setEltBackgroundColor (elt, colorNumber) 
{ if (is.nav4) elt.bgColor = colorNumber;
  else if (elt.style) elt.style.backgroundColor = colorNumber;
}

/* ----------------------------------------------------------
                   要素の背景色取得関数
   これらは相互に依存しているので纏めて再利用せねばなりません。
   ---------------------------------------------------------- */

var colorNameString = "aqua,black,blue,fuchsia,gray,green,lime,maroon,navy,olive,purple,red,silver,teal,yellow,white";
var colorNames   = new Array ("aqua", "black", "blue", "fuchsia", "gray",   "green", "lime", "maroon", "navy", "olive",  "purple", "red",    "silver", "teal", "yellow", "white");
var colorNumbers = new Array (0xffff, 0,       0xff,   0xff00ff,  0x808080, 0x8000,  0xff00, 0x800000, 0x80,   0x808000, 0x800080, 0xff0000, 0xc0c0c0, 0x8080, 0xffff00, 0xffffff);



/* aString 文字列が CSS1 で定義された 16 の色名に含まれるかテストします */
function isColorName (aString)
{ return ( (typeof(aString) == "string") && (colorNameString.indexOf(aString) != -1));
}

/* "white" などの色名文字列を 0xffffff などの数値に変換します。
   IE4 の拡張リストではなく、CSS1 標準16色 のみをサポートします。
*/
function colorNameToNumber (colorName)
{ for (var i=0; i<16; i++) if (colorNames[i]==colorName) return colorNumbers[i];
  // 見つからなければ何もせずに文字列を返す。 
  // これにより IE4 のCSS1 標準外色指定を礼節をもって扱います。 
  return colorName;
}

/* 0xffffff などの数値を "white" などの色名文字列に変換します。
   IE4 の拡張リストではなく、CSS1 標準16色 のみをサポートします。
*/
function colorNumberToName (colorNumber)
{ for (var i=0; i<16; i++) if (colorNumbers[i]==colorNumber) return colorNames[i];
  return null;
}

/* elt の背景色を整数値で返します。
   ("red"等の色名や IE4 の "#ffffff"ではありません)
   Nav4 はデフォルトで整数値を返します。IE4 は次のいずれかを返します：
   a) "#" につづく RGB 値を示す6桁の16進数。
   b) "red" などの 16 の色名の1つ
   また、Geckoは次のいずれかを返します。
   a) an rgb string like "rgb(255,0,255)"
   b) one of the 16 string color names like red.
   それで、互換性のために整数に揃えて返します。
   
   警告：Netscape6 (Gecko) には、10進数の数値を16進数として解釈するバグがあり、
         65280 と設定すると実際には 0x065280 となってしまいます。
         10進数を使用しないで下さい！ 標準ではありません。
   警告：CSS1 標準16色のみが 整数に変換されます。
*/

function getEltBackgroundColor (elt) 
{
  if (is.nav4) return (elt.bgColor);
  else if (is.ie4up) 
  {
     var colorVal = elt.style.backgroundColor;
     if (isColorName(colorVal)) return colorNameToNumber (colorVal);
     else if (typeof(colorVal) == "string") 
          return (("0x" + colorVal.substring(1)) - 0);
     else return colorVal;
  }
  else if (is.gecko) {
    var colorVal = elt.style.backgroundColor;
    
	 if (typeof(colorVal) == "string")
	 { 	
		if (isColorName(colorVal)) 	
		{
			return colorNameToNumber (colorVal);
		}
		else if (colorVal.indexOf(["rgb"]) != -1) 
		{	
			var sR,sG,sB;
			var iR,iG,iB;
			var i=0;

			ColorString = (elt.style.backgroundColor);
			//ColorString = "rgb(255,20,255)";
			ColorString = ColorString.slice(4,-1);

			while(ColorString[i] != ',' && i < 20){i++;}
			sR = ColorString.slice(0,-(ColorString.length - i));
			i++;
			j = i;
			while(ColorString[j] != ',' && j < 20){j++;}
			sG = ColorString.slice(i,0-(ColorString.length - j));
			j++;
			sB = ColorString.slice(j);
			iR = stringToNumber(sR);
			iG = stringToNumber(sG);
			iB = stringToNumber(sB);
			sR = iR.toString(16);if(sR.length < 2)sR = "0" + sR;if(sR.length < 2)sR = "0" + sR;
			sG = iG.toString(16);if(sG.length < 2)sG = "0" + sG;if(sG.length < 2)sG = "0" + sG;
			sB = iB.toString(16);if(sB.length < 2)sB = "0" + sB;if(sB.length < 2)sB = "0" + sB;

			sRGB = sR.toUpperCase()+sG.toUpperCase()+sB.toUpperCase();
			return (("0x" + sRGB)-0);
		}
	 }
     else return colorVal;
  }
}

/* 100px などの文字列の先頭部分を取り出し、数値でなければ 0 を返す文字列の数値変換
*/
function stringToNumber(s)
{
        return parseInt(('0' + s), 10)
}

/**************lib end********************/
function DisposeAll(){
//	alert('DisposeAll');
	obj = getElt('WORLDWIDE');
	obj.className = 'grobal2';

	//close windowを消去
	hideEltById("CLOSEWINDOW");

	//下地地図を消去
	hideEltById("MAPBASE");
	hideEltById("MAPCLICK");

	//clickareaを消去
	obj = getElt('MAPCLICK');
	hideElt(obj);
	obj.className = "";
	gClickNum = -1;

	//rolloverを消去
	obj = getElt('MAP');
	hideElt(obj);
	obj.className = "";	
	gSelMapNum = -1;

	//textareaを消去
	hideEltById("MAPTEXT");
	DisposeRelativeTextlInkArea();

	//hide all titleimg
	DisposeAllTitleImg();

	gLastClickedDivID="";
	gLastWithinDivID = "";
//alert('disposeall');
	gShow=false;
	gBtnLock=false;
}


function ClickWoldwideBtn(){
	gLastClickedDivID = this.id;
	if ( gShow ){
		//すべてをとじる
		DisposeAll();
	}
	else{
		//すべてを表示(ここで初期化)
		//ボタンcssを変更
		obj = getElt('WORLDWIDE');
		obj.className = 'global_click';

		//世界地図表示
		showEltById("MAPBASE");
		showEltById("MAP");
		showEltById("MAPTEXT");

		//close window
		showEltById("CLOSEWINDOW");

		gShow=true;
		gBtnLock=false;

	}

}

function debug(str){
//<div id="debug">::</div>
//	document.getElementById('debug').innerHTML = str + " ";
/**
<form name="debugform"><input type="text" name="debug" ></form>
**/
	document.debugform.debug.value = str + " ";
}


function OtherAreaCloseHandler(){
	if ( !gShow ){
		return;
	}

	if ( gBtnLock ){
		gBtnLock=false;
		return;
	}
	
	if (
		 (gLastClickedDivID == "WORLDWIDE") || 
		 (gLastClickedDivID == "MAPBASE") || 
		 (gLastClickedDivID == "MAP") || 
		 (gLastClickedDivID == "MAPCLICK") || 
		 (gLastClickedDivID == "MAPTEXT") || 
		 (gLastClickedDivID == "CLOSEWINDOW" )
		 ){
		return;
	}

	DisposeAll();

}

function ClickHtmlBody(e){
//	alert(this.id + ':htmlBtnLock:' + gBtnLock + ':html:' + gLastClickedDivID);
	OtherAreaCloseHandler();
	gLastClickedDivID=this.id;
	gBtnLock = true;
}

function DocumentClick(){
//	alert(this.id + ':documentBtnLock:' + gBtnLock + ':html:' + gLastClickedDivID);
	OtherAreaCloseHandler();
	gLastClickedDivID=this.id;
	gBtnLock = false;
}

function DisposeRelativeTextlInkArea(){
	hideEltById("MAPTEXT_0");
	hideEltById("MAPTEXT_1");

	// all delete
	for( dividx = 0;dividx<2;dividx++){
		divo = getElt("MAPTEXT_" + dividx);

		while (divo.firstChild) {
			divo.removeChild(divo.firstChild);
		}
	}
}


function append2BaseText(cTNumb, wichplace){
	baseTag = getElt("MAPTEXT_" + wichplace);

	for(li = 0; li< gLinkText[cTNumb][wichplace].length; li++){
		aTag = document.createElement("a");
		aTag.href = "http://www.syngenta.com/en/country/" + gLinkTarget[cTNumb][wichplace][li];
		aTag.appendChild(document.createTextNode( gLinkText[cTNumb][wichplace][li] ));

		baseTag.appendChild(aTag);
		baseTag.appendChild(document.createElement("br"));
	}
}


function ChangeText(cNum){
	hideEltById("MAPTEXT");
	DisposeRelativeTextlInkArea();

	append2BaseText(cNum,0);
	append2BaseText(cNum,1);

	showEltById("MAPTEXT_0");
	showEltById("MAPTEXT_1");

}

function DisposeAllTitleImg(){
	for( idx=0;idx<MAXARR;idx++){
		targetidstr = 'AREATITLEIMG_' + idx;
		hideEltById(targetidstr);
	}
}

function ShowClickableArea(cnum){
	obj = getElt('MAPCLICK');
	obj.className = "map" + cnum;
	showElt(obj);
	
	//hide all titleimg
	DisposeAllTitleImg();
	
	//title image
	targetidstr = 'AREATITLEIMG_' + cnum;
	showEltById(targetidstr);

	ChangeText(cnum);
	gClickNum = cnum;
}


function ClickBaseMap(e){
	gLastClickedDivID = this.id;
//alert('base');
}

function ClickMap(e){

//	x = getLocalMouseX(this,e);
//	y = getLocalMouseY(this,e);

	if ( gSelMapNum >= 0 ){
		ShowClickableArea(gSelMapNum);
	}
	gLastClickedDivID = this.id;
}

function MMoveMap(e){
//debug(jsGetMouseX(e));
//	debug(getEltPageLeft(this));
	x = getLocalMouseX(this,e);
	y = getLocalMouseY(this,e);

	withinnum = GetWithin(x,y);
	if ( withinnum >= 0 ){
		LayerShowForce(withinnum);
	}
	else{
		LayerHideForce();
	}

	gLastWithinDivID = this.id;
//	debug("22:" + gLastWithinDivID);

}


function GetWithinByMapId(mapnum,x,y){
	for( i=0;(i<gPosArrX[mapnum].length) && (i<gPosArrY[mapnum].length) ;i++){
		if ( ( gPosArrX[mapnum][i] == x ) && ( gPosArrY[mapnum][i] == y ) )
			return( mapnum );
	}

	return(-1);
}

function GetWithin(x,y){
	mapnum = -1;

	//for( idx=0;idx<6;idx++){
	for( idx=0;idx<MAXARR;idx++){

		mapnum = GetWithinByMapId(idx,x,y);
		if ( mapnum >= 0 )
			break;
	}

	return(mapnum);
}


function LayerShowForce(mapnum){
	if ( mapnum < 0 )
		rerturn;

	obj = getElt('MAP');
	obj.className = "map" + mapnum;
	showElt(obj);
	
	gSelMapNum = mapnum;
}


function LayerHideForce(){
	hideEltById("MAP");
	gLastWithinDivID="";
	gSelMapNum = -1;
}

function MMoveClicableLayer(e){
//debug(jsGetMouseX(e));
//	debug(getEltPageLeft(this));
	x = getLocalMouseX(this,e);
	y = getLocalMouseY(this,e);

	withinnum = GetWithin(x,y);
	if ( withinnum >= 0 ){
		LayerShowForce( withinnum );
	}
	else
		LayerShowForce( gClickNum );

}

function ClickClicableLayer(e){
	if ( gSelMapNum >= 0 ){
		ShowClickableArea(gSelMapNum);
	}
	gLastClickedDivID = this.id;
}




function ClickCloseWin(e){
	DisposeAll();
	gLastClickedDivID = this.id;
}


function ClickTextLink(str){
	strobj = new String(str);
	//strobj = e.target + "";
	ind = strobj.indexOf("countries_",0);
	if ( ind >= 0 ){
		arr = strobj.split("countries_",2);
		newint = parseInt(arr[1]);

		LayerShowForce(newint);
		ShowClickableArea(newint);
	}
	gLastClickedDivID = this.id;
}

function MMoveBaseMap(e){
//	if ( ( gLastWithinDivID != 'MAPBASE' ) && ( gLastWithinDivID != '' ) )
//		return;
//debug(jsGetMouseX(e));
//	debug(getEltPageLeft(this));
	x = getLocalMouseX(this,e);
	y = getLocalMouseY(this,e);

	withinnum = GetWithin(x,y);
	if ( withinnum >= 0 ){
		if ( withinnum != gSelMapNum )
			LayerShowForce(withinnum);
	}
	else{
		if ( gClickNum < 0 ){
			if ( gSelMapNum < 0 )
				LayerHideForce( gSelMapNum );
		}
	}
//	debug(x + ":" + y);

	gLastWithinDivID = this.id;
//	debug("11:" + gLastWithinDivID);
}

window.onload = function() {
	document.onclick = DocumentClick;

	//worldwide ボタン
	jsStartEvent(jsGetLayOjStr('WORLDWIDE'),'click','ClickWoldwideBtn');	// BtnClick
//	obj1 = document.getElementById("WORLDWIDE");
//	obj1.onclick = ClickWoldwideBtn;

	//画面全体
	jsStartEvent(jsGetLayOjStr('INDEX'),'click','ClickHtmlBody');//BodyClick
//	obj2 = document.getElementById("INDEX");
//	obj2.onclick = ClickHtmlBody;

	//地図下絵
	jsStartEvent(jsGetLayOjStr('MAPBASE'),'mousemove','MMoveBaseMap');	//BaseMapMouseMove
	jsStartEvent(jsGetLayOjStr('MAPBASE'),'click','ClickBaseMap');
//	obj3 = document.getElementById("MAPBASE");
//	obj3.onmousemove = MMoveBaseMap;

	//rollover用
	jsStartEvent(jsGetLayOjStr('MAP'),'mousemove','MMoveMap');	//MapMouseMove
	jsStartEvent(jsGetLayOjStr('MAP'),'click','ClickMap');//MapMouseClick
//	obj4 = document.getElementById("MAP");
//	obj4.onclick = ClickMap;
//	obj4.onmousemove = MMoveMap;

	//click確定後のrollover用
	jsStartEvent(jsGetLayOjStr('MAPCLICK'),'mousemove','MMoveClicableLayer');	//MapClickareaMouseMove
	jsStartEvent(jsGetLayOjStr('MAPCLICK'),'click','ClickClicableLayer');	//MapClickareaMouseClick
//	obj5 = document.getElementById("MAPCLICK");
//	obj5.onclick = ClickClicableLayer;
//	obj5.onmousemove = MMoveClicableLayer;

	//デフォルトのテキストリンク用
//	jsStartEvent(jsGetLayOjStr('MAPTEXT'),'click','ClickTextLink');	//MapClickareaMouseClick
//	obj6 = document.getElementById("MAPTEXT");
//	obj6.onclick = ClickTextLink;

	//close window
	jsStartEvent(jsGetLayOjStr('CLOSEWINDOW'),'click','ClickCloseWin');

}
