window.onerror=null;
//IE と Netscape 間の差異をある程度解消する
mozillaDOM=false;

function IEcompatible(){
 var i;
 if(document.layers){
  document.body=new Object();
  document.body.id=window.name;
  document.body.document=document;
  document.body.clientWidth=innerWidth;
  document.body.clientHeight=innerHeight;
  IEcompatible.translate(document.body);
  document.allObjects=document.body.allObjects;
  document.all=IEcompatible.all;}
 if(document.getElementById&&!document.all){
  mozillaDOM=true;
  IEcompatible.collectAll(document.body);
  document.allObjects=document.body.allObjects;
  document.all=IEcompatible.all;}}

 if(document.getElementById&&!document.all){
  IEcompatible.clearTimeout=clearTimeout;
  IEcompatible.clearInterval=clearInterval;
  window.clearTimeout=function(id){
   if(id!=null){IEcompatible.clearTimeout(id);}}
  window.clearInterval=function(id){
   if(id!=null){IEcompatible.clearInterval(id);}}}


IEcompatible.born=function(childLayer){
  layer=childLayer.parentLayer;
  if(layer==window){
   layer=document.body;}
  childLayer.parentElement=layer;
  IEcompatible.translate(childLayer);
  if(layer.add2All&&layer.add2Children){
   layer.add2All(childLayer);
   layer.add2Children(childLayer);}}

IEcompatible.translate=function(layer){
 var i,childImage,childLayer;

 if(!layer){
  return false;}
 layer.style=layer;
 if(!layer.allObjects){layer.allObjects=new Object();}
 if(!layer.childrenObjects){layer.childrenObjects=new Object();}
 layer.add2All=IEcompatible.add2All;
 layer.add2Children=IEcompatible.add2Children;
 layer.all=IEcompatible.all;
 layer.children=IEcompatible.children;
 for(i=0;i<layer.document.images.length;i++){
  childImage=layer.document.images[i];
  childImage.parentElement=layer;
  layer.add2All(childImage);
  layer.add2Children(childImage);}
 for(i=0;i<layer.document.layers.length;i++){
  childLayer=layer.document.layers[i];
  if(childLayer){
   childLayer.parentElement=layer;}
  IEcompatible.translate(childLayer);
  layer.add2All(childLayer);
  layer.add2Children(childLayer);}
 for(i in layer.allObjects){
  window[i]=window.document.body.allObjects[i];}
 return true;}

IEcompatible.add2All=function(object){
 var tmpObject,id;
 if(!object){
  return false;}
 if(object.name && object.name!=''){
 id=object.name.substring(0,(object.name+'_').indexOf('_'));
//netscape では、同じ NAME が現れると、'_' をつけて、その後に続く数字で区別するようにしているらしい。対策をおこなっておく。 
  if(!this.allObjects[id]){
   this.allObjects[id]=object;}
  else{
    if(this.allObjects[id][0]){//すでに Array 化されていたら…
    this.allObjects[id][this.allObjects[id].length]=object;}
   else{
    tmpObject=this.allObjects[id];
    this.allObjects[id]=new Array();
    this.allObjects[id][0]=tmpObject;
    this.allObjects[id][1]=object;}}
  if(this.parentElement!=null){
   this.parentElement.add2All(object);}}
return true;}

IEcompatible.add2Children=function(object){
 var tmpObject,id;
 if(!object){
  return false;}
 if(object.name && object.name!=''){
 id=object.name.substring(0,(object.name+'_').indexOf('_'));
 //netscape では、同じ NAME が現れると、'_' をつけて、その後に続く数字で区別するようにしているらしい。 対策をおこなっておく。
  if(!this.childrenObjects[id]){
   this.childrenObjects[id]=object;}
  else{
    if(this.childrenObjects[id][0]){//すでに Array 化されていたら…
    this.childrenObjects[id][this.childrenObjects[id].length]=object;}
   else{
    tmpObject=this.childrenObjects[id];
    this.childrenObjects[id]=new Array();
    this.childrenObjects[id][0]=tmpObject;
    this.childrenObjects[id][1]=object;}}}
 return true;}

IEcompatible.all=function(id){
 return this.allObjects[id];
}

IEcompatible.children=function(id){
 return this.childrenObjects[id];
}

IEcompatible.collectAll=function(node){
 node.allObjects=new Object();
 var i,element;
 var elements=node.getElementsByTagName('*');
 for(i=0;i<elements.length;i++){
  element=elements.item(i);
  if(element.name && element.tagName=='IMG'){
   node.allObjects[element.name]=element;}
  if(element.id && element.nodeType==1){
   node.allObjects[element.id]=element;
   window[element.id]=element;
   IEcompatible.collectAll(element);
   element.all=IEcompatible.all;}}}

