var z=0 ;
var isNetscape ;
var showNav  = true ;
var orbitNav = true ;
var noIcons     = 14;
var theStatus = '';
var iconSp=360/noIcons ;
var radius   = 0 ; 
var radDiv = 0 ;
var lastStatus=null;

var pi2=3.141*2 ;
var direction   = 2 ;
var rotSpeed    = 2 ; 
var endSpeed    = 2 ;
var navType     = 1 ; 
var lastNavType = 1;
var transition  =1 ;
var rotVelocity =2 ;

var lastX=new Array(); 
var lastY=new Array(); 
var dispX=new Array(); 
var dispY=new Array(); 
var currX=new Array(); 
var currY=new Array();

var category   = new Array();
var navObject  = new Array();
var gfxObject  = new Array();
var catObject  = new Array();
var navScale   = new Array();
var navDesired = new Array();

var catTransition = 2 ; 
var catTransSpeed = -1 ;
var subCatTrans=0 ; 
var subCatSq = 0 ;

isNetscape=getNetscape(); 

category[0]=6 ;
category[1]=2 ;
category[2]=3 ;
category[3]=3 ;


function start()
{
   for (i=1 ; i<noIcons+1 ; i++ )
   {
      navObject[i] = getObj('navIcon'+i);

      if (!isNetscape)
         gfxObject[i] = getObj('navImage'+i);
      else 
         gfxObject[i] = null;
       
      navScale[i]  = 64 ;
      navDesired[i]= 64 ;
      lastX[i]=0 ;
      currX[i]=0 ;
      dispX[i]=0 ;
      lastY[i]=0 ;
      currY[i]=0 ;
      dispY[i]=0 ;
   }  
   for (i=0 ; i<4 ; i++ )
   {
      catObject[i+1]=getObj('category'+(i+1));
   }  

   // set up basic images for NS 6+
   setSideBarStuff();

   startMovement();
}


function setSideBarStuff()
{
   if (!(getObj('headingIcon')==null ||
       getObj('sideBarImg')==null ||
       getObj('navSelIcon')==null ||
       getObj('navHomeIcon')==null ||
       getObj('navEmailIcon')==null ))
   {
       moveLayer(getObj('headingIcon'), 64, 64, null, 128);
       moveLayer(getObj('sideBarImg'), 0, 128, null, 0); 
       moveLayer(getObj('navSelIcon'), 0, 128, null, 0);
       moveLayer(getObj('navHomeIcon'), 120,120, null, 0);
       moveLayer(getObj('navEmailIcon'), 128, 0, null, 0);
   }
   if (getObj('navBackIcon')!=null )
   {
       moveLayer(getObj('headingIcon'), 64, 64, null, 128);
   }


}

function setStatus(value)
{
   theStatus=value;
}

function display(image, width, height)
{
   var win = new Object();
   width+=32;
   height+=30;
   win=window.open('displayImage.html?'+ image ,'',' width='+width+',height='+height+',resizable=yes,scrollbars=yes' );
   win.focus();

}

function showBNav() 
{ 
  direction=2; 
  if (navType==2) 
  { 
    catTransSpeed= 0.5 
  } 
  showNav=true ; 
}

function hideNav() 
{ 
  direction=-2; 
  catTransSpeed = -0.5 ; 
  showNav=false ; 
}

function toggleNav() 
{ 
  if (showNav==true) { 
    hideNav(); 
  } else { 
    showBNav(); }  
    
  return ; 
}

function toggleCat()
{
  if (orbitNav==true)
  {
    setCatNav() ;  
  } else {
    setRotNav() ;
  }
  return;  
}

function setRotNav()    
{ 
  MM_swapImage('navType','','nav/a_catNav.gif',1);
  navType= 1 ; 
  catTransSpeed = -.5 ; 
  orbitNav= true;
}

function setCatNav()    
{ 
  MM_swapImage('navType','','nav/a_orbitalNav.gif',1);
  navType= 2 ; 
  if (direction>0 ) 
  {
    catTransSpeed = .5 ;
  } 
  orbitNav= false;
}

function rotClock() 
{ 
  endSpeed=1.5 ; 
}

function rotNot()   
{ 
  endSpeed=0 ; 
}

function scaleUp(iconNo)    
{ 
   if (!isNetscape)
   {
      navDesired[iconNo]=96; 
   }
}

function scaleDown(iconNo)
{
   if (!isNetscape)
   {
      navDesired[iconNo]=64; 
   }
   
}

function startMovement()
{
   
   if (endSpeed==0 && rotSpeed<0.1 ) {
      rotSpeed=0 ; 
   } else if (rotSpeed<endSpeed) {
      rotSpeed=rotSpeed+0.05 ;
   } else if (rotSpeed>endSpeed) {
      rotSpeed=rotSpeed-0.05 ; 
   } 

   if ((catTransition>0 && catTransSpeed<0 ) || 
      (catTransition<30 && catTransSpeed>0 )) 
   {
      catTransition+=catTransSpeed ;
   }

   z=z+rotSpeed; 

   //velocity check if 
   //radius for icons to expand from base icon

   if (lastNavType!=navType)
   {
      for (i=1 ; i<noIcons+1 ; i++ )
      {
         lastX[i]=dispX[i] ;
         lastY[i]=dispY[i] ;
      }
      lastNavType=navType ;
      transition = 0 ;
      transComplete = false ;
   }

   if ((radius<150 && direction>0) || (radius>0 && direction<0))
      { radius+=direction; }

   radDiv=radius/150 ;
   
   if (navType==1)
   { //normal Rotational nav

      for (i=1 ; i<noIcons+1 ; i++ )
      {

         rad=degToRad(z+(i*iconSp));
         currX[i]=64+Math.cos(rad)*radius;
         currY[i]=64+Math.sin(rad)*radius;

      }
   }
   else 
   { // category nav 
      catNum=0; 
      nextCat=0; 
      catRad=2;
      for (i=1 ; i<noIcons+1 ; i++ )
      {
         if (i>=nextCat)
         {
            nextCat=i+category[catNum++];
            catRad=2;
         }
         rad=degToRad((catNum-1)*30);
         currX[i]=64+(Math.cos(rad)*(catRad*64))*radDiv  ;
         currY[i]=64+(Math.sin(rad)*(catRad*64))*radDiv ;
         catRad++;
      }
   }

   for (i=1 ; i<noIcons+1 ; i++) 
   {
      if (transition<1) 
      {
         dispX[i]=lastX[i]+((currX[i]-lastX[i])*transition);
         dispY[i]=lastY[i]+((currY[i]-lastY[i])*transition);
      } 
      else
      {
         dispX[i]=currX[i];
         dispY[i]=currY[i];
      }
   }
   if (transition<1)
   {
      transition=transition+0.02 ;
   }
      
   //move in category headings
   
   if (catTransition>0 && catTransition<30)
   { 
      subCatTrans=30-catTransition ;
      subCatSq=subCatTrans*subCatTrans ;
      for (j=0 ; j<4 ; j++) 
      {
         rad=degToRad(j*30);
         headcurrX=96+(Math.cos(rad)*((category[j]+2)*64)) ;
         headcurrY=96+(Math.sin(rad)*((category[j]+2)*64))-subCatSq ;
         //Calc x
         moveLayer(catObject[j+1],headcurrX,headcurrY, null, 128);
      }
   }

   for (i=1 ; i<noIcons+1 ; i++ )
   {
      if (navScale[i]<navDesired[i])
         navScale[i]+=2 ; 
      else if (navScale[i]>navDesired[i])
         navScale[i]-=2 ;
   }  

   if (lastStatus!=theStatus)
   {
      defaultStatus = theStatus ;
      lastStatus=theStatus;
   }

   //move icons
   for (i=1 ; i<noIcons+1 ; i++ ) 
   {
      //alert('X:'+dispX[i]+" Y:"+dispY[i]+" S:"+navScale[i]);
      moveLayer(navObject[i],orix+dispX[i], oriy+dispY[i], gfxObject[i], navScale[i])  ;
   }

   //if method is categorise
   setSideBarStuff();

   setTimeout("startMovement()",30) ;
  
}

function degToRad(degrees) 
{ 
   return (degrees/360)*pi2; 
}

function moveLayer(obj, xOffset, yOffset, gfxobj, scale)
{
    //alert('X:'+xOffset+ '  Y:'+yOffset+'  S:'+scale);
  scaleHalf= scale*0.5 ;
  if ( !isNetscape  ) 
  { 
    obj.style.left  = xOffset-scaleHalf ; 
    obj.style.top   = yOffset-scaleHalf ;
    if (gfxobj!=null)
    {  
      gfxobj.style.width = scale ;
      gfxobj.style.height= scale ;
    }
  } 
  else 
  { 
     obj.left  = xOffset-scaleHalf ; 
     obj.top   = yOffset-scaleHalf ; 
  }
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function getNetscape()
{
  if (document.getElementById) { 
    return false ;  
  }
  return true ;
}

function getObj(name)
{ 
  if (document.getElementById) { return document.getElementById(name); }
  else if (document.all) { return document.all[name]; }
  else if (document.layers) { return document.layers[name]; }
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

