
var cookieName="superdarn-rtmap"

var baseURL = "/rt/map/";

var dummy="/rt/map/big/tgrd/tgrd.big.north.png";
var dummypc="/rt/map/pc.dummy.png";
var dummysct="/rt/map/sct.dummy.png";


var endFlag=false;
var ourHour=12;
var ourMinute=0;
var ourDate=20030417;
var MLT=0;

var newHour=8;
var newMinute=30;
var newDate="20000830";

var pole="north";

var dataFlag=false;

var  cookie="";

var catRecord=new Array();
var dateRecord=new Array();
var mltRecord=new Array();

var byfilter=false;

if ((navigator.appName=="Microsoft Internet Explorer") &&
    (!window.XMLHttpRequest)) byfilter=true;



function GetXmlHttpObject() {
 var xmlHttp=null;
 try   {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }  catch (e)    {
    // Internet Explorer
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
  return xmlHttp;
}

function toggle(value) {

  for (l=0;l<layerid.length;l++) if (layerid[l]==value) break;

  chkid=layerid[l]+"chk";
  el=document.getElementById(chkid);
  state=el.checked;

   if (state==false) layerstate[l]="hidden";
   else layerstate[l]="visible";

   divid=layerid[l]+"div";
   el= document.getElementById(divid);
   if (state==false) el.style.visibility="hidden";
   else el.style.visibility="visible";
}




function setImage(id,src) {

  if (byfilter) {
    el=document.getElementById(id+"div");
    el.filters[0].src=src;
  } else {
    el=document.getElementById(id+"img");
    el.src=src;
  }
}




function setImages() {
 
  if ((newDate==ourDate) && 
       (newHour==ourHour) && (newMinute==ourMinute)) return;

 
  ourDate=newDate;
  ourHour=newHour;
  ourMinute=newMinute;

  yrmody=ourDate;
  yr=yrmody.substring(0,4);
  mody="xxxx"+yrmody.substring(4);

  frame=ourHour*60+ourMinute+1;
  if (frame<10) fstr="000"+frame;
  else if (frame<100) fstr="00"+frame;
  else if (frame<1000) fstr="0"+frame;
  else fstr=""+frame;
  
  r=-parseInt(1440*MLT*15.0/360);
    
  if (r<0) r+=1440;
  if (r>1440) r-=1440;
   
  if (r<10) rotation="000"+r;
  else if (r<100) rotation="00"+r;
  else if (r<1000) rotation="0"+r;
  else rotation=""+r;  

  for (l=0;l<layerid.length;l++) {

      divid=layerid[l]+"div";
      el=document.getElementById(divid);

      el.style.visibility=layerstate[l];

      if (dataFlag==false) URL=dummy;
      else {
        if (layerfreq[l]==0)URL=baseURL+"big/"+layerid[l]+"/"+
                              layerid[l]+".big."+pole+".png"
        else if (layerfreq[l]==1) URL=baseURL+"big/"+layerid[l]+"/"+
                        layerid[l]+".big."+pole+"."+rotation+".png"; 
        else if (layerfreq[l]==2) {
          URL=baseURL+"cgiwrap.cgi?command"
          URL=URL+"=/www/superdarn/rt/map/panel&cli=";
          URL=URL+"png+"+layerid[l]+"+big+"+yrmody+"+"+fstr;
        }  else URL=baseURL+"big/"+layerid[l]+"/"+yr+"/"+yrmody+"/"+fstr+".png";
      }
      setImage(layerid[l],URL);

  }
  if (dataFlag==false) URL=dummypc;
  else  URL=baseURL+"pc"+"/"+yr+"/"+yrmody+"/"+fstr+".png";
  el=document.getElementById("pcimg");
  el.src=URL;
  
  if (dataFlag==false) URL=dummysct;
  else URL=baseURL+"sct"+"/"+yr+"/"+yrmody+"/"+fstr+".png";
  el=document.getElementById("sctimg");
  el.src=URL;



 return;
}

function getDate() {
 var l=document.theTime.date.options.length;
 for (c=0;c<l;c++) if (document.theTime.date.options[c].selected==true) break;
 return dateRecord[c];
}
 
function getHour() {
 var l=document.theTime.hour.options.length;
 for (c=0;c<l;c++) if (document.theTime.hour.options[c].selected==true) break;
 return c;
}


function getMinute() {
 var l=document.theTime.minute.options.length;
 for (c=0;c<l;c++) if (document.theTime.minute.options[c].selected==true) break;
 return 2*c;
}


function buildTime(date,hr,mt) {
  if (hr<10) hrstr="0"+hr;
  else hrstr=""+hr;
  if (mt<10) mtstr="0"+mt;
  else mtstr=""+mt;
  time=date+" "+hrstr+" "+mtstr;
  return time;
}

function findRecord(date,hr,mt) {
  test=buildTime(date,hr,mt)
  for (c=0;c<catRecord.length;c++) {
    if (catRecord[c]==test) break;
  }

  return c;
}

function setDate(date) {
  var l=dateRecord.length;
  document.theTime.date.options.length=dateRecord.length;
 
  for (c=0;c<l;c++) {
    document.theTime.date.options[c].text=dateRecord[c];
    document.theTime.date.options[c].selected=false;
    if (dateRecord[c]==date) document.theTime.date.options[c].selected=true;
   
  }
}

function setHour(hr) {
  var l=document.theTime.hour.options.length;
  var i=hr;
  for (c=0;c<l;c++) document.theTime.hour.options[c].selected=false;
  document.theTime.hour.options[i].selected=true;
}

function setMinute(mt) {
  var l=document.theTime.minute.options.length;
  var i=mt/2;
  for (c=0;c<l;c++) document.theTime.minute.options[c].selected=false;
  document.theTime.minute.options[i].selected=true;
}


function change() {

  if (catRecord.length==0) return 0;

  newDate=getDate();
  newHour=getHour();
  newMinute=getMinute();

  c=findRecord(newDate,newHour,newMinute);
  if (c<catRecord.length) {
    MLT=mltRecord[c];
    dataFlag=true;
  }
  else dataFlag=false;
  if (c==catRecord.length-1) endFlag=true;
  else endFlag=false;

  setImages();
}

function setNextHour() {

  if (catRecord.length==0) return 0;


  c=findRecord(ourDate,ourHour,ourMinute);
  if (c==catRecord.length-1) return;
  c+=30;
  if (c>=catRecord.length) c=catRecord.length-1;
  if (c==catRecord.length-1) endFlag=true;
  else endFlag=false;

  dataFlag=true;

  newDate=catRecord[c].substring(0,8);
  newHour=parseInt(catRecord[c].substring(9,11),10);
  newMinute=parseInt(catRecord[c].substring(12,14),10);
  MLT=mltRecord[c];

  setMinute(newMinute);
  setHour(newHour);
  setDate(newDate);
  setImages();
}

function setPrevHour() {

  if (catRecord.length==0) return 0;

  c=findRecord(ourDate,ourHour,ourMinute);
  if (c==0) return;
  c-=30;
  if (c<0) c=0;


  endFlag=false;
  dataFlag=true;

  newDate=catRecord[c].substring(0,8);
  newHour=parseInt(catRecord[c].substring(9,11),10);
  newMinute=parseInt(catRecord[c].substring(12,14),10);
  MLT=mltRecord[c];

  setMinute(newMinute);
  setHour(newHour);
  setDate(newDate);
  setImages();
}

function setNext() {
 
  if (catRecord.length==0) return 0;


  c=findRecord(ourDate,ourHour,ourMinute);
 
  c++;
  if (c>=catRecord.length) return;
  if (c==catRecord.length-1) endFlag=true;
  else endFlag=false;

  dataFlag=true;
 
  newDate=catRecord[c].substring(0,8);
  newHour=parseInt(catRecord[c].substring(9,11),10);
  newMinute=parseInt(catRecord[c].substring(12,14),10);
  MLT=mltRecord[c];
  
  setMinute(newMinute);
  setHour(newHour);
  setDate(newDate);
  setImages();
}

function setPrev() {


  if (catRecord.length==0) return 0;

  c=findRecord(ourDate,ourHour,ourMinute);
  c--;
  
  if (c<0) return;

   endFlag=false;
   dataFlag=true;

  newDate=catRecord[c].substring(0,8);
  newHour=parseInt(catRecord[c].substring(9,11),10);
  newMinute=parseInt(catRecord[c].substring(12,14),10);
  MLT=mltRecord[c];

  setMinute(newMinute);
  setHour(newHour);
  setDate(newDate);
  setImages();
}


function setEnd() {

  if (catRecord.length==0) return 0;

  var e=catRecord.length-1;
 
  lstDate=catRecord[e].substring(0,8);
  lstHour=parseInt(catRecord[e].substring(9,11),10);
  lstMinute=parseInt(catRecord[e].substring(12,14),10);

  if ((newDate==lstDate) && 
       (newHour==lstHour) && (newMinute==lstMinute)) return ;
  endFlag=true;
  dataFlag=true;

  newDate=lstDate;
  newHour=lstHour;
  newMinute=lstMinute;
  MLT=mltRecord[e];

  setMinute(newMinute);
  setHour(newHour);
  setDate(newDate);
  setImages();
}

function setStart() {

  var s=0;

  if (catRecord.length==0) return 0;

  fstDate=catRecord[s].substring(0,8);
  fstHour=parseInt(catRecord[s].substring(9,11),10);
  fstMinute=parseInt(catRecord[s].substring(12,14),10);
  
  if ((newDate==fstDate) && 
       (newHour==fstHour) && (newMinute==fstMinute)) return ;
  dataFlag=true;
  endFlag=false;
  newDate=fstDate;
  newHour=fstHour;
  newMinute=fstMinute;
  MLT=mltRecord[s];

  setMinute(newMinute);
  setHour(newHour);
  setDate(newDate);
  setImages();
}


function setCatalog() {

  if (xmlHttpCat.readyState==4) {
     var xmldoc=xmlHttpCat.responseXML;
     var dnode=xmldoc.getElementsByTagName('date');
     for (var inode=0;inode<dnode.length;inode++) 
       catRecord[inode]=dnode[inode].firstChild.nodeValue;
  
     var dcnt=0;
     for (c=0;c<catRecord.length;c++) {
       if (dcnt==0) {
         dateRecord[dcnt]=catRecord[c].substring(0,8);
         dcnt++;
       } else if (dateRecord[dcnt-1] !=catRecord[c].substring(0,8)) {
         dateRecord[dcnt]=catRecord[c].substring(0,8);
         dcnt++;
       }
       mltRecord[c]=parseFloat(catRecord[c].substring(15));
       catRecord[c]=catRecord[c].substring(0,14);
     }

     if (endFlag==true) {
       dataFlag=true;
       e=catRecord.length-1;
       newDate=catRecord[e].substring(0,8);
       newHour=parseInt(catRecord[e].substring(9,11),10);
       newMinute=parseInt(catRecord[e].substring(12,14),10);
       MLT=mltRecord[e];
     } else {
       c=findRecord(newDate,newHour,newMinute);
       if (c<catRecord.length) {
         dataFlag=true;
         MLT=mltRecord[c];
       } else dataFlag=false;
     }     
    
     setMinute(newMinute);
     setHour(newHour);
     setDate(newDate); 
     setImages();

  }
}


function getCatalog() {

  xmlHttpCat=GetXmlHttpObject();
  if (xmlHttpCat==null) {
    alert("Your browser does not support AJAX!");
    return false;
  }
  xmlHttpCat.onreadystatechange=setCatalog;
  url="cat.xml";
  xmlHttpCat.open("GET",url,true);
  xmlHttpCat.send(null);
}




function update() {
 getCatalog();
 timerID=setTimeout("update()",60000);
}

function setup() {

   cookie=getCookie()

   if (cookie !=null) {
      newYear=parseInt(cookie.substring(0,4),10);
     if (newYear !=0000) {
       newDate=cookie.substring(0,8);
       newHour=parseInt(cookie.substring(9,11),10);
       newMinute=parseInt(cookie.substring(12,14),10);
       endFlag=false;
     } else endFlag=true;
   } else endFlag=true;


   for (l=0;l<layerid.length;l++) {
    checkid=layerid[l]+"chk";

    el=document.getElementById(checkid);
    if (layerstate[l]=="visible") el.checked=true;
    else el.checked=false;
    divid=layerid[l]+"div";
    el=document.getElementById(divid);
    el.style.visibility=layerstate[l];
  }

  getCatalog();
  timerID=setTimeout("update()",60000);

}

function unload() {
 setCookie();
}


function getCookie(){
    if (document.cookie.length > 0) {              
    begin = document.cookie.indexOf(cookieName+"=");       
    if (begin != -1) {           
      begin += cookieName.length+1;       
      end = document.cookie.indexOf(";", begin);
      if (end == -1) end = document.cookie.length;
        return unescape(document.cookie.substring(begin, end));
    } 
  }
  return null;
}

function setCookie() {
  var ExpireDate = new Date();
  ExpireDate.setTime(ExpireDate.getTime() + (365 * 24 * 3600 * 1000));


  if (endFlag==false) 
    document.cookie = cookieName + "=" + 
                     escape(buildTime(ourDate,ourHour,ourMinute)) +";"
  else 
     document.cookie = cookieName + "=" + "0000;"

}
