// 1: initialize global menu vars
var apost="'";
var menuOverallWidth=0;
var widthAvail=0;
var menuX=0;
var menuY=0;
var menuYieVariance=0;
var menuHeight=0;
var menuMaxCol=0;
var menuLabel=multiDimensionalArray(20,20);
var menuURL=multiDimensionalArray(20,20);
var menuDependentFloat=multiDimensionalArray(20,20);
var menuKernPoints=new Array(20);
var menuWidth=new Array(20);
var floatMenuLabel=multiDimensionalArray(20,20);
var floatMenuURL=multiDimensionalArray(20,20);
var floatMenuX=new Array(20);
var floatMenuY=new Array(20);
var floatMenuWidth=new Array(20);
var floatMenuAssociatedCol=new Array(20);
var floatMenuKernPoints=new Array(20);
var menuPaddingTop=0;
var menuPaddingLeft=0;
var mouseButton=0;

// 2: *** Customize global menu vars
menuMaxCol=8;
menuHeight=22;
menuY=142;
menuYieVariance=-1;
menuPaddingTop=1;     //should match CSS
menuPaddingLeft=0;    //should match CSS, nonzero value indicates left alignment
menuOverallWidth=896;

// 3: *** Customize grid menus (col, row, label, url, dependentFloatNum0-19)
// if some items are too narrow, it's OK to add padding spaces to label below
// if left-aligned in CSS, padding spaces on right side only.
setMenu(0,0,'Home','/','');
setMenu(1,0,'Our Approach','/allrisk_approach.php','');
setMenu(2,0,'Services','/our_services.php','');
setMenu(3,0,'Contact','/contact_us.php','');
setMenu(4,0,'Client Reports','/client_reports/','');
setMenu(5,0,'Impairment Notification','/imp_notification.php','');
setMenu(6,0,'Bulletin Board','/bulletin_board.php','');
setMenu(7,0,'Admin','/admin.php','');

// 4: *** Customize floating menus (num0-19, row, label, url)
// setFloatMenu(0,0,'xx','/xx/xx.php');

// ==== end customizaations ====

if(document.all){
  // correct menuY for ieVariance
  menuY=menuY+menuYieVariance;

  // works for IE6
  widthAvail = document.body.clientWidth;
}else{
  // works for FFX (horz centering requires leftmargin=0 and rightmargin=0 in body tag)
  widthAvail = document.body.offsetWidth;
}

// horz menu must be horz centered
menuX=Math.round((widthAvail-menuOverallWidth)/2);

// IE6 requires position further left than FFX
if(widthAvail%2==0 || menuOverallWidth%2==0){if(document.all){menuX--;}}

calcMenuLabelKernPoints();
calcMenuWidths();
writeMenus();

// ==== begin functions ====

function conditionalMenuHideAll(e){
  if(document.all){
    mouseButton=event.button;
  }else{
    mouseButton=e.which;
  }
  if(mouseButton==1){menuHideAll();}
}
function menuHideAll(){
  // hide all column menus
  var col=0;
  for(col = 0; col <= (menuMaxCol-1); col++){
    if(menuLabel[col][1]!=''){
      menuHide('menuCol'+col);
    }
  }

  // hide all floating menus
  var num=0;
  for(num = 0; num <= 19; num++){
    if(floatMenuLabel[num][0]!=''){
      menuHide('menuFloat'+num);
    }
  }
}
function menuRedoOnResize(){
  var oldMenuX=menuX;

  if(document.all){
    // works for IE6
    widthAvail = document.body.clientWidth;
  }else{
    // works for FFX (requires leftmargin=0 and rightmargin=0 in body tag)
    widthAvail = document.body.offsetWidth;
  }

  menuX=Math.round((widthAvail-menuOverallWidth)/2);

  // IE6 requires position further left than FFX
  if(widthAvail%2==0 || menuOverallWidth%2==0){if(document.all){menuX--;}} 

  // reposition main menu
  menuReposition('menuMain',menuX);

  // reposition column menus
  var col=0;
  var x=0;
  var i=0;
  for(col = 0; col <= (menuMaxCol-1); col++){
    if(menuLabel[col][1]!=''){

      // calculate horizontal position for this column
      x=menuX;
      i=0;
      if(!document.all && menuPaddingLeft>0){
        // works for Firefox
        if(col>0){for(i=0; i < col; i++){x=x+menuWidth[i]+menuPaddingLeft;}}
      }else{
        // works for IE6
        if(col>0){for(i=0; i < col; i++){x=x+menuWidth[i];}}
      }

      menuReposition('menuCol'+col,x);
    }
  }

  // reposition floating menus
  var xDelta=menuX-oldMenuX;
  var num=0;
  for(num = 0; num <= 19; num++){
    if(floatMenuLabel[num][0]!=''){
      floatMenuX[num]=floatMenuX[num]+xDelta;
      x=floatMenuX[num];
      menuReposition('menuFloat'+num,x);
    }
  }
}
function menuReposition(id,x){
  if(document.getElementById){
    document.getElementById(id).style.left=x;
  }else{
    if(document.layers){
      document.id.left=x;
    }else{
      document.all.id.style.left=x;
    }
  }
}
function multiDimensionalArray(x,y){
  var i;
  var j;
  var a = new Array(x);
  for(i=0; i < x; i++){
    a[i] = new Array(y);
    for(j=0; j < y; j++){
      a[i][j] = "";
    }
  }
  return(a);
} 
function writeMenus(){
  // write this always-visible first row of grid menu
  var col=0;
  document.write('<table id=menuMain border=0 cellspacing=0 cellpadding=0 style="display:block; position:absolute; z-index:2; left:'+menuX+'; top:'+menuY+'; width:'+menuOverallWidth+'; height:'+menuHeight+';"><tr>');
  for(col = 0; col <= (menuMaxCol-1); col++){
    var omOverPhrase='';
    var omOutPhrase='';
    if(menuLabel[col][1]!=''){omOverPhrase='onmouseover="menuShow('+apost+'menuCol'+col+apost+');"';}
    if(menuLabel[col][1]!=''){omOutPhrase='onmouseout="menuHide('+apost+'menuCol'+col+apost+');"';}
    var anchorWidth=0;
    var anchorHeight=0;
    if(navigator.appName=='Microsoft Internet Explorer'){
      anchorWidth=menuWidth[col];
      anchorHeight=menuHeight;
    }else{
      if(navigator.appName=='Netscape'){
        anchorWidth=menuWidth[col]-2;
        anchorHeight=menuHeight-2-menuPaddingTop;
      }else{
        if(navigator.appName=='Opera'){
          anchorWidth=menuWidth[col]-2;
          anchorHeight=menuHeight-2-menuPaddingTop;
        }else{
          anchorWidth=menuWidth[col]-2;
          anchorHeight=menuHeight-2-menuPaddingTop;
        }
      }
    }
    document.write('<td><a style="width:'+anchorWidth+'; height:'+anchorHeight+';" class=menu href='+menuURL[col][0]+' '+omOverPhrase+' '+omOutPhrase+'>'+menuLabel[col][0]+'</a></td>');
  }
  document.write('</tr></table>');

  // write these sometimes-visible columns of grid menu
  for(col = 0; col <= (menuMaxCol-1); col++){
    if(menuLabel[col][1]!=''){

      // calculate horizontal position for this column
      var x=menuX;
      var i=0;

      if(!document.all && menuPaddingLeft>0){
        // works for Firefox
        if(col>0){for(i=0; i < col; i++){x=x+menuWidth[i]+menuPaddingLeft;}}
      }else{
        // works for IE6
        if(col>0){for(i=0; i < col; i++){x=x+menuWidth[i];}}
      }

      // calculate vertical position for this column
      var y=menuY+menuHeight;

      // calculate height of this column
      var ht=0;
      for(row=1; row<=19; row++){
        if(menuLabel[col][row]!=''){ht=ht+menuHeight;}else{break;}
      }

      document.write('<table border=0 cellspacing=0 cellpadding=0 id=menuCol'+col+' style="display:none; position:absolute; z-index:3; left:'+x+'; top:'+y+'; width:'+menuWidth[col]+'; height:'+ht+';">');
      for(row=1; row<=19; row++){
        if(menuLabel[col][row]!=''){
          omOverPhrase='onmouseover="menuShow('+apost+'menuCol'+col+apost+');';
          omOutPhrase='onmouseout="menuHide('+apost+'menuCol'+col+apost+');';

          // also show dependent floating menu, if any
          if(menuDependentFloat[col][row]!=''){
            omOverPhrase=omOverPhrase+'menuShow('+apost+'menuFloat'+menuDependentFloat[col][row]+apost+');';
            omOutPhrase=omOutPhrase+'menuHide('+apost+'menuFloat'+menuDependentFloat[col][row]+apost+');';
            floatMenuAssociatedCol[menuDependentFloat[col][row]]=col;

            // if this is the rightmost column...
            if(col==menuMaxCol){

              // then make floatMenuX match it's parent column
              // (this will have to be adjusted later, see FMXADJ)
              floatMenuX[menuDependentFloat[col][row]]=x;

            // if this is NOT the rightmost column...
            }else{

              // then give floatMenuX it's final value
              floatMenuX[menuDependentFloat[col][row]]=x+menuWidth[col];

              // if not IE6 and left-aligned menu labels...
              if(!document.all && menuPaddingLeft>0){
                floatMenuX[menuDependentFloat[col][row]]=floatMenuX[menuDependentFloat[col][row]]+menuPaddingLeft;
              }
            }
            floatMenuY[menuDependentFloat[col][row]]=y+((row-1)*menuHeight);
          }

          omOverPhrase=omOverPhrase+'"';
          omOutPhrase=omOutPhrase+'"';

          if(navigator.appName=='Microsoft Internet Explorer'){
            anchorWidth=menuWidth[col];
            anchorHeight=menuHeight;
          }else{
            if(navigator.appName=='Netscape'){
              anchorWidth=menuWidth[col]-2;
              anchorHeight=menuHeight-2-menuPaddingTop;
            }else{
              if(navigator.appName=='Opera'){
                anchorWidth=menuWidth[col]-2;
                anchorHeight=menuHeight-2-menuPaddingTop;
              }else{
                anchorWidth=menuWidth[col]-2;
                anchorHeight=menuHeight-2-menuPaddingTop;
              }
            }
          }
          document.write('<tr height='+menuHeight+'><td><a style="width:'+anchorWidth+'; height:'+anchorHeight+';" class=submenu href='+menuURL[col][row]+' '+omOverPhrase+' '+omOutPhrase+'>'+menuLabel[col][row]+'</a></td></tr>');
        }
      }
      document.write('</table>');
    }
  }

  // write these sometimes-visible floating menus
  var num=0;
  for(num = 0; num <= 19; num++){
    if(floatMenuLabel[num][0]!=''){

      // calculate height of this floating menu
      ht=0;
      for(row=0; row<=19; row++){
        if(floatMenuLabel[num][row]!=''){ht=ht+menuHeight;}else{break;}
      }

      // if this floating menu is associated with the rightmost column...
      if(floatMenuAssociatedCol[num]==menuMaxCol-1){

        // then move it to the LEFT side of the column
        // (This is the adjustment promised earlier, reference FMXADJ)
        floatMenuX[num]=floatMenuX[num]-floatMenuWidth[num]-menuWidth[floatMenuAssociatedCol[num]];

        // if not IE6 and left-aligned menu labels...
        if(!document.all && menuPaddingLeft>0){
          floatMenuX[num]=floatMenuX[num]-(menuPaddingLeft*2);
        }
      }

      document.write('<table border=0 cellspacing=0 cellpadding=0 id=menuFloat'+num+' style="display:none; position:absolute; z-index:4; left:'+floatMenuX[num]+'; top:'+floatMenuY[num]+'; width:'+floatMenuWidth[num]+'; height:'+ht+';">');
      for(row=0; row<=19; row++){
        if(floatMenuLabel[num][row]!=''){
          omOverPhrase='onmouseover="menuShow('+apost+'menuFloat'+num+apost+');';
          omOutPhrase='onmouseout="menuHide('+apost+'menuFloat'+num+apost+');';

          // also show associated column menu
          omOverPhrase=omOverPhrase+'menuShow('+apost+'menuCol'+floatMenuAssociatedCol[num]+apost+');';
          omOutPhrase=omOutPhrase+'menuHide('+apost+'menuCol'+floatMenuAssociatedCol[num]+apost+');';

          omOverPhrase=omOverPhrase+'"';
          omOutPhrase=omOutPhrase+'"';
          if(navigator.appName=='Microsoft Internet Explorer'){
            anchorWidth=floatMenuWidth[num];
            anchorHeight=menuHeight;
          }else{
            if(navigator.appName=='Netscape'){
              anchorWidth=floatMenuWidth[num]-2;
              anchorHeight=menuHeight-2-menuPaddingTop;
            }else{
              if(navigator.appName=='Opera'){
                anchorWidth=floatMenuWidth[num]-2;
                anchorHeight=menuHeight-2-menuPaddingTop;
              }else{
                anchorWidth=floatMenuWidth[num]-2;
                anchorHeight=menuHeight-2-menuPaddingTop;
              }
            }
          }
          document.write('<tr height='+menuHeight+'><td><a style="width:'+anchorWidth+'; height:'+anchorHeight+';" class=submenu href='+floatMenuURL[num][row]+' '+omOverPhrase+' '+omOutPhrase+'>'+floatMenuLabel[num][row]+'</a></td></tr>');
        }
      }
      document.write('</table>');
    }
  }
}
function setMenu(col,row,label,url,dep){
  menuLabel[col][row]=label;  
  menuURL[col][row]=url;  
  menuDependentFloat[col][row]=dep;  
}
function setFloatMenu(num,row,label,url){
  floatMenuLabel[num][row]=label;
  floatMenuURL[num][row]=url;  
}
function calcMenuLabelKernPoints(){
  // calculate kern points to determine menu column widths
  var col=0;
  var charPtr=0;
  for(col = 0; col <= (menuMaxCol-1); col++){
    for(row = 0; row <= 19; row++){
      var curLabel=menuLabel[col][row];
      if(curLabel!=''){
        var curKernPoints=0;
        for(charPtr = 0; charPtr <= (curLabel.length-1); charPtr++){
          var c=curLabel.charAt(charPtr);
          curKernPoints=curKernPoints+getKernPoints(c);
        }

        // add equivalent of one space on either side
        curKernPoints=curKernPoints+(getKernPoints(' ')*2);

        if(curKernPoints>menuKernPoints[col] || menuKernPoints[col]==undefined){menuKernPoints[col]=curKernPoints;}
      }
    }
  }

  // calculate kern points to determine floating menu widths
  var num=0;
  for(num = 0; num <= 19; num++){
    for(row = 0; row <= 19; row++){
      curLabel=floatMenuLabel[num][row];
      if(curLabel!=''){
        curKernPoints=0;
        for(charPtr = 0; charPtr <= (curLabel.length-1); charPtr++){
          curKernPoints=curKernPoints+getKernPoints(curLabel.charAt(charPtr));
        }

        // add equivalent of one space on either side
        curKernPoints=curKernPoints+(getKernPoints(' ')*2);

        if(curKernPoints>floatMenuKernPoints[num] || floatMenuKernPoints[num]==undefined){floatMenuKernPoints[num]=curKernPoints;}
      }
    }
  }
}
function calcMenuWidths(){
  // determine totalKernPoints across entire menu width
  var totalKernPoints=0;
  var col=0;
  for(col=0; col <= (menuMaxCol-1); col++){
    totalKernPoints=totalKernPoints+menuKernPoints[col];
  }

  // determine width of menu columns
  var ratio=menuOverallWidth / totalKernPoints;
  for(col=0; col <= (menuMaxCol-1); col++){
    menuWidth[col]=Math.floor(menuKernPoints[col] * ratio);
  }

  // check to see if total of column widths leaves a remainder ( < menuOverallWidth)
  var totalWidth=0;
  for(col=0; col <= (menuMaxCol-1); col++){
    totalWidth=totalWidth+menuWidth[col];
  }
  var remainder=menuOverallWidth - totalWidth;

  // add any remainder into columns to make total of column widths match menuOverallWidth
  if(remainder>0){
    for(col=0; col <= (menuMaxCol-1); col++){
      menuWidth[col]++;
      remainder--;
      if(remainder==0){break;}
    }
  }

  // if not IE, subtract again from menu widths to compensate for padding-left
  if(!document.all && menuPaddingLeft>0){
    for(col=0; col <= (menuMaxCol-1); col++){
      menuWidth[col]=menuWidth[col]-menuPaddingLeft;
    }
  }

  //determine width of floating menus 
  var num=0;
  for(num=0; num <= 19; num++){
    if(floatMenuLabel[num][0]!=''){
      floatMenuWidth[num]=Math.floor(floatMenuKernPoints[num] * ratio);
    }
  }
}
function menuShow(id){
  if(document.getElementById){
    document.getElementById(id).style.display='block';
  }else{
    if(document.layers){
      document.id.display='block';
    }else{
      document.all.id.style.display='block';
    }
  }
}
function menuHide(id){
  if(document.getElementById){
    document.getElementById(id).style.display='none';
  }else{
    if(document.layers){
      document.id.display='none';
    }else{
      document.all.id.style.display='none';
    }
  }
}
function getKernPoints(c){
  switch(c){
    case 'a':return 100;break;
    case 'b':return 100;break;
    case 'c':return 100;break;
    case 'd':return 100;break;
    case 'e':return 100;break;
    case 'f':return 51;break;
    case 'g':return 100;break;
    case 'h':return 100;break;
    case 'i':return 41;break;
    case 'j':return 41;break;
    case 'k':return 92;break;
    case 'l':return 41;break;
    case 'm':return 150;break;
    case 'n':return 100;break;
    case 'o':return 100;break;
    case 'p':return 100;break;
    case 'q':return 100;break;
    case 'r':return 61;break;
    case 's':return 100;break;
    case 't':return 51;break;
    case 'u':return 100;break;
    case 'v':return 92;break;
    case 'w':return 130;break;
    case 'x':return 100;break;
    case 'y':return 92;break;
    case 'z':return 92;break;
    case 'A':return 119;break;
    case 'B':return 119;break;
    case 'C':return 130;break;
    case 'D':return 130;break;
    case 'E':return 119;break;
    case 'F':return 110;break;
    case 'G':return 140;break;
    case 'H':return 130;break;
    case 'I':return 51;break;
    case 'J':return 90;break;
    case 'K':return 119;break;
    case 'L':return 100;break;
    case 'M':return 150;break;
    case 'N':return 130;break;
    case 'O':return 140;break;
    case 'P':return 119;break;
    case 'Q':return 140;break;
    case 'R':return 130;break;
    case 'S':return 119;break;
    case 'T':return 110;break;
    case 'U':return 130;break;
    case 'V':return 119;break;
    case 'W':return 169;break;
    case 'X':return 119;break;
    case 'Y':return 119;break;
    case 'Z':return 110;break;
    case '1':return 100;break;
    case '2':return 100;break;
    case '3':return 100;break;
    case '4':return 100;break;
    case '5':return 100;break;
    case '6':return 100;break;
    case '7':return 100;break;
    case '8':return 100;break;
    case '9':return 100;break;
    case '0':return 100;break;
    case '~':return 105;break;
    case '!':return 51;break;
    case '@':return 183;break;
    case '#':return 100;break;
    case '$':return 100;break;
    case '%':return 160;break;
    case '&':return 120;break;
    case '*':return 71;break;
    case '(':return 61;break;
    case ')':return 61;break;
    case '_':return 100;break;
    case '+':return 105;break;
    case '`':return 61;break;
    case '-':return 61;break;
    case '=':return 105;break;
    case '{':return 61;break;
    case '}':return 61;break;
    case '|':return 48;break;
    case '[':return 51;break;
    case ']':return 51;break;
    case ':':return 51;break;
    case '"':return 64;break;
    case ';':return 51;break;
    case "'":return 35;break;
    case '<':return 105;break;
    case '>':return 105;break;
    case '?':return 100;break;
    case ',':return 51;break;
    case '.':return 51;break;
    case '/':return 51;break;
    case ' ':return 48;break;
    default:return 100;break;
  }
}