// API:
//
// function begin_menu(name,url_base,transparent_pixel,type,position_x,position_y,halign,need_click,delay_vertical,delay_horizontal,
//                     delay_hide,do_hide_selects,do_hide_objects,do_hide_iframes,source_frame,source_x,source_y,target_frame,
//                     target_x,target_y)
//
// function begin_submenu(name,[type,direction,offset_x,offset_y,padding,entry_padding,left_margin_width,right_margin_width,opacity,
//                        effect_show,show_transition,effect_hide,hide_transition,transition_speed,dropshadow_transparent,
//                        dropshadow_distance,dropshadow_color,bg_color,bg_image,bg_repeat,border_style,border_width,border_color,width])
//
// function begin_submenu_extend(name,template_name,args)
//
// function add_entry(name,[ENTRY_SEPARATOR,separator_size,background_color,separator_image,separator_image_width,separator_image_height])
// function add_entry(name,[type,text,image,image_active,image_width,image_height,image_border,url,target,status_text,title,icon,
//                    icon_active,icon_width,icon_height,icon_border,arrow,arrow_active,arrow_width,arrow_height,arrow_border,
//                    horizontal_alignment,vertical_alignment,background_color,is_transparent,background_color_active,is_transparent_active,
//                    background_image,background_image_active,background_repeat,background_repeat_active,border_style,border_width,
//                    border_color,border_color_active,text_color,text_color_active,text_font,text_font_active,text_decoration,
//                    text_decoration_active])
//
// function end_submenu()
// function end_menu()
//
// Known bugs:
//
//  - the last entry of real submenus in other frames does not get correct active background color
//    (workaround added, so bug is not user-visible)
//
var UA_OPERA=0;
var UA_OPERA5=0;
var UA_IEXPLORER=0;
var UA_IEXPLORER4=0;
var UA_IEXPLORER5=0;
var UA_NETSCAPEISH=0;
var UA_NETSCAPE4=0;
var UA_GECKO=0;
var UA_IEXPLORER_MAC=0;
var UA_IEXPLORER_WIN=0;
var UA_KONQUEROR=0;
var UAVERSION=0.0;
var OS_MAC=0;
var HAS_DOM=0;
var HAS_FILTERS=1;
var DEL_BORDER=0;
var ADD_BORDER=0;
browser_detect();
var DONTUSE_DIV = UA_IEXPLORER || UA_OPERA && (UAVERSION >=6 && UAVERSION < 7);
var MENU_INLINE = 0;
var MENU_FIXED = 1;
var MENU_ABSOLUTE = 2;
var DIR_LEFT = 1;
var DIR_RIGHT = 2;
var DIR_UP = 3;
var DIR_DOWN = 4;
var DECORATION_UNDERLINE = 1;
var DECORATION_LINETHROUGH = 2;
var DECORATION_OVERLINE = 4;
var ENTRY_TEXT_NOWRAP = 0;
var ENTRY_TEXT = 1;
var ENTRY_IMAGE = 2;
var ENTRY_SEPARATOR = 6;
var SUBMENU_HORIZONTAL = 0;
var SUBMENU_VERTICAL = 1;
var ALIGN_LEFT = 0;
var ALIGN_CENTER = 1;
var ALIGN_RIGHT = 2;
var table_TYPE2POS = ["static","absolute","absolute"];
var table_HALIGN = ["left","center","right"];
var table_VALIGN = ["top","middle","bottom"];
var table_REPEAT = ["no-repeat","repeat-x","repeat-y","repeat"];
var table_BORDERSTYLE = ["none","solid","double","dotted","dashed","groove","ridge"];
var MAX_MENUS = 10;
var current_menutagtext = "";
var current_menutag = 0;
var timer_check_position = null;
var timer_scroll_menuclose = null;
var current_xpos;
var current_ypos;
var current_width;
var current_height;
var current_menuid = 0;
var current_submenuid;
var current_entryid;
var regex_ENTRY = /Stm([0-9]*)p([0-9]*)i([0-9]*)e/;
var regex_SUBMENU = /Stm([0-9]*)p([0-9]*)i/;
var regex_ISABSOLUTE = /^([a-z0-9]+:\/|[a-zA-Z]:)/;
var regex_SPACES = / +/;
var image_cache=[];
var all_menus=[];
var is_initialized=0;

if (UA_NETSCAPE4) {
  handler_ENTRYOVER = make_nn4_event_function('handle_entry_mouseover',1);
  handler_ENTRYOUT = make_nn4_event_function('handle_entry_mouseout',1);
  handler_ENTRYCLICK = make_nn4_event_function('handle_entry_click',1);
  handler_SUBMENUOVER = make_nn4_event_function('handle_submenu_mouseover',0);
  handler_SUBMENUOUT = make_nn4_event_function('handle_submenu_mouseout',0);
}

if (UA_IEXPLORER4||UA_NETSCAPE4)
  window.onerror = function(msg,code,line) {
    return true; //!confirm("Java Script Error\n\nDescription:"+msg+"\nSource:"+code+"\nLine:"+line+"\n\nSee more details?");
  }

if (HAS_DOM) window.onload = initialize;

if (UA_IEXPLORER_MAC||UA_OPERA5)
  window.onunload = function() {
    if(timer_check_position) {
      clearInterval(timer_check_position);
      timer_check_position=null;
    }
    return true;
  }

if (typeof(menutags_initialized) == 'undefined') {
  if (HAS_DOM && !UA_NETSCAPE4) {
    var src="<STYLE>.menutable,.menutd,.menudiv,.menufont{border:none;padding:0px;margin:0px;}</STYLE>";
    for (var i=0; i<MAX_MENUS; i++)
      src += "<FONT style='position:absolute;left:0px;top:0px;z-index: 10;' ID=menutag"+i+"></FONT>";

    if (UA_IEXPLORER_WIN && UAVERSION>=5.0 && document.body)
      document.body.insertAdjacentHTML("AfterBegin",src);
    else
      document.write(src);
  }
  menutags_initialized = 1;
}

function hide_fallback(id)
{
	try {
		document.getElementById(id).style.display = "none";
	} catch (ex) {
		setTimeout("hide_fallback('"+id+"');",10);
	}
}

function begin_menu(name,url_base,transparent_pixel,type,position_x,position_y,halign,need_click,
                    delay_vertical,delay_horizontal,delay_hide,
                    do_hide_selects,do_hide_objects,do_hide_iframes,source_frame,source_x,source_y,target_frame,
                    target_x,target_y)
{
  all_menus[current_menuid]= {
    submenus:[],
    menuid:current_menuid,
    id_string:"Stm"+current_menuid+"p",
    timer_hide:null,
    submenu_click_opened:0,
    target_frame:(typeof(target_frame) != 'undefined'?target_frame:window),
    source_frame:(typeof(target_frame) != 'undefined'?source_frame:window),
    screenX: (typeof(target_frame) != 'undefined'?(target_frame == window?target_x:source_x):0),
    screenY: (typeof(target_frame) != 'undefined'?(target_frame == window?target_y:source_y):0),
    target_screenX: target_x,
    target_screenY: target_y,
    name:name,
   url_base:url_base,
    transparent_pixel:preload_image(url_base+transparent_pixel),
    type:type,
    position_x:position_x,
    position_y:position_y,
    halign:table_HALIGN[halign],
    click_for_submenu:need_click,
    delay_vertical:delay_vertical,
    delay_horizontal:delay_horizontal,
    hide_delay:UA_NETSCAPE4?Math.max(100,delay_hide):delay_hide,
    hide_selects:do_hide_selects,
    hide_objects:do_hide_objects,
    hide_iframes:do_hide_iframes
  };
}

function begin_submenu(varname,a)
{
  var parent_submenu = current_submenuid;
  var parent_entry = current_entryid;
  current_submenuid = all_menus[current_menuid].submenus.length;
  current_entryid = 0;
  var menu = all_menus[current_menuid];

  menu.submenus[current_submenuid] = {
    entries:[],
    menuid:current_menuid,
    submenuid:current_submenuid,
    id_string:"Stm"+current_menuid+"p"+current_submenuid+"i",
    parent:(current_submenuid?[current_menuid,parent_submenu,parent_entry]:null),
    timer_show:null,
    active_entryid:-1,
    is_showing:0,
    is_static: !current_submenuid && menu.type==MENU_INLINE,
    click_to_open: !current_submenuid && menu.click_for_submenu,
    show_or_hide_complete:0,
    is_vertical:a[0],
    direction:a[1],
    offset_x:a[2],
    offset_y:a[3],
    padding:a[4],
    entry_padding:a[5],
    left_margin_width:a[6],
    right_margin_width:a[7],
    opacity:a[8],
    effect_show:a[9]?a[9]:"Normal",
    show_transition:a[10],
    effect_hide:a[11]?a[11]:"Normal",
    hide_transition:a[12],
    transition_speed:a[13],
    dropshadow_transparent:a[14],
    dropshadow_distance:UA_IEXPLORER_WIN?a[15]:0,
    dropshadow_color:a[16],
    bg_color:a[17],
    bg_image:preload_image(get_absolute_url(a[18],menu,0)),
    bg_repeat:table_REPEAT[a[19]],
    border_style:table_BORDERSTYLE[a[20]],
    border_width:a[21],
    border_color:(!HAS_DOM||UA_NETSCAPE4)?a[22].split(regex_SPACES)[0]:a[22],
    width:a[23],
    args:a.slice(0)
  };
  var self = menu.submenus[current_submenuid];
  if (current_submenuid && !get_parent_of(self).submenu) get_parent_of(self).submenu = [current_menuid,current_submenuid];

  self.z_index = (!current_submenuid?1000:get_parent_of(get_parent_of(self)).z_index+10);

  if (UA_IEXPLORER_WIN&&UAVERSION>=5.5) {
    self.event_function_show = (self.effect_show=="Normal"?"normal_":"filtered_");
    self.event_function_hide = (self.effect_hide=="Normal"?"normal_":"filtered_");
  } else if (UA_IEXPLORER_WIN && (UAVERSION>=5.0 || UAVERSION>=4.0 && !self.is_static)) {
    self.event_function_show = (self.show_transition>=0?"filtered_":"normal_");
    self.event_function_hide = (self.hide_transition>=0?"filtered_":"normal_");
  } else {
    self.event_function_show = self.event_function_hide = "normal_";
  }
  eval(varname+"=self;");
}

function begin_submenu_extend(varname,templatename,a)
{
  var template=eval(templatename);
  begin_submenu(varname,a.concat(template.args.slice(a.length)));
}

function add_entry(varname,a)
{
  current_entryid = all_menus[current_menuid].submenus[current_submenuid].entries.length;
  var menu = all_menus[current_menuid];
  var submenu = menu.submenus[current_submenuid];
  var self;

  if (a[0]==ENTRY_SEPARATOR) {
    self = submenu.entries[current_entryid] = {
      name:varname,
      menuid:current_menuid,
      submenuid:current_submenuid,
      entryid:current_entryid,
      id_string:submenu.id_string+current_entryid+"e",
      submenu:null,
      timer_show:null,
      entry_type:a[0],
      separator_size:a[1],
      background_color:[a[2]],
      separator_image:preload_image(get_absolute_url(a[3],menu,1)),
      separator_image_width:a[4],
      separator_image_height:a[5],
      args:a.slice(0)
    };
  } else {
    self = submenu.entries[current_entryid]= {
      name:varname,
      menuid:current_menuid,
      submenuid:current_submenuid,
      entryid:current_entryid,
      id_string:submenu.id_string+current_entryid+"e",
      submenu:null,
      timer_show:null,
      entry_type:a[0],
      text:a[0]?a[1]:a[1].replace(new RegExp(" ","g"),"&#160;"),
      image:[preload_image(get_absolute_url(a[2],menu,0)),preload_image(get_absolute_url(a[3],menu,0))],
      image_width:a[4],
      image_height:a[5],
      image_border:a[6],
      url:a[7],
      target:a[8],
      status_text:a[9],
      title:a[10],
      icon:[preload_image(get_absolute_url(a[11],menu,1)),preload_image(get_absolute_url(a[12],menu,1))],
      icon_width:a[13],
      icon_height:a[14],
      icon_border:a[15],
      arrow:[preload_image(get_absolute_url(a[16],menu,0)),preload_image(get_absolute_url(a[17],menu,0))],
      arrow_width:a[18],
      arrow_height:a[19],
      arrow_border:a[20],
      horizontal_alignment:table_HALIGN[a[21]],
      vertical_alignment:table_VALIGN[a[22]],
      background_color:UA_OPERA5&&UAVERSION<7.0&&a[24]&&a[26]?["transparent","transparent"]:[UA_OPERA5&&UAVERSION<7.0||!a[24]?a[23]:"transparent",UA_OPERA5&&UAVERSION<7.0||!a[26]?a[25]:"transparent"],
      background_image:[preload_image(get_absolute_url(a[27],menu,0)),preload_image(get_absolute_url(a[28],menu,0))],
      background_repeat:[table_REPEAT[a[29]],table_REPEAT[a[30]]],
      border_style:table_BORDERSTYLE[a[31]],
      border_width:a[32],
      border_color:(!HAS_DOM||UA_NETSCAPE4)?[a[33].split(regex_SPACES)[0],a[34].split(regex_SPACES)[0]]:[a[33],a[34]],
      text_color:[a[35],a[36]],
      text_font:[a[37],a[38]],
      text_decoration:[get_text_decoration_css(a[39]),get_text_decoration_css(a[40])],
      args:a.slice(0)
    };
    self.background=[make_css_bg(self.background_color[0],self.background_image[0],self.background_repeat[0]),make_css_bg(self.background_color[1],self.background_image[1],self.background_repeat[1])];
  }
  eval(varname+"=self;");
}

function add_entry_extend(varname,templatename,a)
{
  var template=eval(templatename);
  add_entry(varname,a.concat(template.args.slice(a.length)));
}

function end_submenu()
{
  var menu = all_menus[current_menuid];
  var submenu = menu.submenus[current_submenuid];
  var entry = get_parent_of(submenu);
  if (entry) {
    current_menuid = entry.menuid;
    current_submenuid = entry.submenuid;
    current_entryid = entry.entryid;
  }
  if (submenu.entries.length == 0) {
    menu.submenus.length--;
    if (entry) entry.submenu=null;
  }
  // FIXME: This is needed in multi-frame mode due to some not yet found bug
  if (!entry && menu.submenus.length > 1) {
    begin_submenu("XXPHONYXX",[SUBMENU_VERTICAL,DIR_DOWN,0,0,1,0,1,8,100,"",-2,"",-2,56,2,1,"#000000","transparent","",3,0,0,"#000000"]);
    add_entry("XXXPHONYXXX",[ENTRY_SEPARATOR,0,"transparent","",0,0]);
  }
}

function generate_menu(menu)
{
  var headsrc = "";
  var stylesrc = "<STYLE TYPE='text/css'>\n";
  var len = HAS_DOM?menu.submenus.length:1;

  var submenuid, entryid, phony;
  for (submenuid in menu.submenus) {
    var submenu = menu.submenus[submenuid];
    var src = get_submenu_begin_source(submenu);
    if (submenu.is_static && menu.halign != "left")
      src = "<TABLE STYLE='border:none;padding:0px;' CELLPADDING=0 CELLSPACING=0 ALIGN="+menu.halign+"><TD class=menutd>"+src;
    for (entryid in submenu.entries) {
      var entry = submenu.entries[entryid];
      src += submenu.is_vertical ? "<TR ID="+entry.id_string+"TR>" : "";
      src += get_entry_source(entry);
      src += (submenu.is_vertical ? "</TR>" : "");
      if (entry.entry_type != ENTRY_SEPARATOR) {
        stylesrc += "."+entry.id_string+"TX0{"+get_entry_text_css(entry,0)+"}\n";
        stylesrc += "."+entry.id_string+"TX1{"+get_entry_text_css(entry,1)+"}\n";
      }
    }
    src += get_submenu_end_source(submenu);
    if (submenu.is_static && menu.halign != "left") src += "</TD></TABLE>";
    
    if ((submenu.is_static && get_menu_of(submenu).source_frame == window) || UA_NETSCAPE4 || !HAS_DOM) headsrc += src;
    else current_menutagtext += src;
  }
  stylesrc += "</STYLE>";

  if (!HAS_DOM || UA_NETSCAPE4) document.write(stylesrc);
  if (headsrc) document.write(headsrc);
  
  if (HAS_DOM && !(UA_IEXPLORER && UAVERSION < 5.0)) {
    if (current_menutagtext) {
      var obj = get_object_by_id('menutag'+menu.menuid,'font');

      if (typeof(obj.innerHTML) != 'undefined') {
        obj.innerHTML = current_menutagtext;
      } else {
        obj.document.write(current_menutagtext);
      }

      current_menutag++;
      current_menutagtext='';
    }
    if (!UA_OPERA && !UA_NETSCAPEISH) initialize_menu(menu);
  }
}

function deeper_copy(obj) {
  if (typeof(obj) != 'object') return obj;
   var name;
   var result = new Object();
   for (name in obj) {
     result[name] = obj[name];
   }
   return result;
}

function take_menus(win)
{
  for (var win_menuid = 0; win_menuid < win.all_menus.length; win_menuid++) {
    if (win.all_menus[win_menuid].target_frame == window) {
      var id = current_menuid;
      if (get_menu_by_name(win.all_menus[win_menuid].name)) id = get_menu_by_name(win.all_menus[win_menuid].name).menuid;
      if (all_menus[id]) hide_all_submenus_of(all_menus[id],0);
      all_menus[id] = deeper_copy(win.all_menus[win_menuid]);
      all_menus[id].screenX = all_menus[id].target_screenX;
      all_menus[id].screenY = all_menus[id].target_screenY;
      win.all_menus[win_menuid].serial = all_menus[id].serial = new Date().getMilliseconds();
      generate_menu(all_menus[id]);
      if (id == current_menuid) {
        current_menuid++;
        current_submenuid = 0;
        current_entryid = 0;
      }
    }
  }
}

function end_menu()
{
  var menu = all_menus[current_menuid];
  if(menu.submenus.length==0) {
    all_menus.length--;
    return;
  }
  generate_menu(menu);
  current_menuid++;
  current_submenuid = 0;
  current_entryid = 0;
}

function get_submenu_begin_source(submenu)
{
  var src = "";
  if (UA_NETSCAPE4||!HAS_DOM) {
    src += submenu.is_static?"<ILAYER":"<LAYER";
    src += " VISIBILITY=hide";
    src += " ID="+submenu.id_string;
    src += " Z-INDEX="+submenu.z_index;
    src += "><LAYER>";
    src += "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING="+submenu.padding;
    src += " BACKGROUND='"+submenu.bg_image+"'";
    src += " BGCOLOR="+(submenu.bg_image||submenu.bg_color=="transparent"?"''":submenu.bg_color);
    src += ">";
  } else {
    src += DONTUSE_DIV ? "<TABLE class=menutable CELLPADDING=0 CELLSPACING=0" : "<DIV class=menudiv";
    src += " onmouseover='handle_submenu_mouseover(event,this,all_menus["+submenu.menuid+"].submenus["+submenu.submenuid+"]);'";
    src += " onmouseout='handle_submenu_mouseout(event,this,all_menus["+submenu.menuid+"].submenus["+submenu.submenuid+"]);'";
    src += " ID="+submenu.id_string;

    src += " STYLE='";
    if (UA_IEXPLORER_MAC) src += "width:1px;";
    else if (UA_IEXPLORER) src += "width:0px;";
    src += get_filter_css(submenu);
    src += "position:"+table_TYPE2POS[submenu.submenuid?MENU_FIXED:get_menu_of(submenu).type]+";";
    src += "z-index:"+(submenu.z_index+5)+";";
    src += "display: none;";//visibility:hidden;";
    src +="'>";

    if (DONTUSE_DIV) src += "<TD class=menutd ID="+submenu.id_string+"TTD>";
    src += "<TABLE class=menutable CELLSPACING=0 CELLPADDING=0";
    src += " ID="+submenu.id_string+"TB";
    src += " STYLE='";
    src += "border-style:"+submenu.border_style+";";
    src += "border-width:"+submenu.border_width+"px;";
    src += "border-color:"+submenu.border_color+";";
    src += "background-color:"+(submenu.bg_color)+";";
    if (submenu.bg_image) {
      src += "background-image:url("+submenu.bg_image+");";
      src += "background-repeat:"+submenu.bg_repeat+";";
    }
    if (UA_IEXPLORER_WIN) src += "margin:"+submenu.dropshadow_distance+"px;";
    src += "'>";
  }
  return src;
}

function get_submenu_end_source(submenu)
{
  var src = "</TABLE>";

  if (UA_NETSCAPE4||!HAS_DOM) src += "</LAYER></LAYER>";
  else if (DONTUSE_DIV) src += "</TD></TABLE>";
  else src += "</DIV>";
  return src;
}

function get_entry_source(entry)
{
  var src = "";
  var submenu = get_parent_of(entry);

  if (UA_NETSCAPE4||!HAS_DOM) {
    src += "<TD WIDTH=1 NOWRAP>";
    src += "<FONT STYLE='font-size:1pt;'>";
    src += "<ILAYER ID="+entry.id_string+"><LAYER";
    if(entry.border_width && entry.entry_type != ENTRY_SEPARATOR)
      src += " BGCOLOR="+entry.border_color[0];
    src += ">";
    for (var layer=0; layer < (UA_NETSCAPE4?2:1); layer++) {
      if (entry.entry_type == ENTRY_SEPARATOR && layer) break;
      src += "<LAYER Z-INDEX=10 VISIBILITY="+(layer?"HIDE":"SHOW");
      if (entry.entry_type != ENTRY_SEPARATOR)
        src += " LEFT="+entry.border_width+" TOP="+entry.border_width;
      src += ">";
      src += "<TABLE ALIGN=LEFT WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING="+(entry.entry_type == ENTRY_SEPARATOR ? 0 : submenu.entry_padding);
      src += " BACKGROUND='"+(entry.entry_type != ENTRY_SEPARATOR? entry.background_image[layer]:"")+"'";
      src += " BGCOLOR="+(entry.entry_type != ENTRY_SEPARATOR && entry.background_image[layer] || entry.background_color[layer]=="transparent"?"''":entry.background_color[layer]);
      src += ">";

      if (entry.entry_type == ENTRY_SEPARATOR) {
        src += "<TD NOWRAP VALIGN=TOP"+
          " HEIGHT="+(submenu.is_vertical ? entry.separator_size : "100%")+
          " WIDTH="+(submenu.is_vertical ? "100%" : entry.separator_size)+
          " STYLE='font-size:0pt;'"+
          ">";
        src += make_html_img(entry.separator_image,entry.id_string+"LINE",entry.separator_image_width,entry.separator_image_height,0);
        src += "</TD>";
      } else {
        if (submenu.is_vertical && submenu.left_margin_width || !submenu.is_vertical && entry.icon_width) {
          src += "<TD ALIGN=CENTER VALIGN=MIDDLE";
          src += get_entry_left_width_string(entry);
          src += ">";
          src += make_html_img(entry.icon[layer],"",entry.icon_width,entry.icon_height,entry.icon_border);
          src += "</TD>";
        }
        src += "<TD WIDTH=100% NOWRAP ALIGN="+entry.horizontal_alignment+" VALIGN="+entry.vertical_alignment+">";
        src += "<A "+get_entry_href_string(entry)+" CLASS='"+(entry.id_string+"TX"+layer)+"'>";

        if (entry.entry_type == ENTRY_IMAGE) {
          src += make_html_img(entry.image[layer],entry.id_string+"IMG",entry.image_width,entry.image_height,entry.image_border);
        } else {
          src += "<IMG SRC=\""+get_menu_of(entry).transparent_pixel+"\" WIDTH=1 HEIGHT=1 BORDER=0 ALIGN=ABSMIDDLE>";
          src += entry.text;
        }

        src += "</A>";
        src += "</TD>";

        if (submenu.is_vertical && submenu.right_margin_width || !submenu.is_vertical && entry.arrow_width) {
          src += "<TD ALIGN=CENTER VALIGN=MIDDLE";
          src += get_entry_right_width_string(entry);
          src += ">";
        if (entry.arrow[layer])
          src += make_html_img(entry.arrow[layer],"",entry.arrow_width,entry.arrow_height,entry.arrow_border);
        else if (!entry.submenu)
          src += "&nbsp;";
        else if (submenu.is_vertical)
          src += "&#9658;";
        else
          src += "&#9660;";
          src += "</TD>";
        }
      }
      src += "</TABLE>";
      if (entry.border_width && entry.entry_type != ENTRY_SEPARATOR)
        src += "<BR CLEAR=ALL><SPACER HEIGHT=1 WIDTH="+entry.border_width+"></SPACER><SPACER WIDTH=1 HEIGHT="+entry.border_width+"></SPACER>";
      src += "</LAYER>";
    }

    if (entry.entry_type != ENTRY_SEPARATOR) src += "<LAYER Z-INDEX=20></LAYER>";
    src += "</LAYER></ILAYER>";
    src += "</FONT>";
    src += "</TD>";
  } else {
    src += "<TD class=menutd NOWRAP VALIGN="+(UA_IEXPLORER ? "MIDDLE" : "TOP");
    src += " STYLE='";
    src += "padding:"+submenu.padding+"px;";
    src += "'";
    src += " ID="+submenu.id_string+entry.entryid;
    if(UA_IEXPLORER_WIN) src += " HEIGHT=100%";
    src += ">";
    if (!UA_OPERA&&!UA_IEXPLORER) {
      src += "<DIV class=menudiv ID="+entry.id_string;
      src += get_entry_event_source(entry);
      src += " STYLE=\""+get_entry_css(entry);
      src += "\"";
      src += ">";
    }
    
    src += "<TABLE class=menutable CELLSPACING=0 CELLPADDING=0";
    if(!UA_OPERA) src += " HEIGHT=100%";
    src += " STYLE=\"";
    if (UA_OPERA||UA_IEXPLORER) src += get_entry_css(entry);
    src += "\"";
    if (UA_OPERA||UA_IEXPLORER) src += get_entry_event_source(entry);
    if (submenu.is_vertical||UA_IEXPLORER_MAC) src += " WIDTH=100%";
    src += " ID="+(UA_OPERA||UA_IEXPLORER ? entry.id_string : (entry.id_string+"TB"));
    if(!UA_OPERA) src += " TITLE="+quote_string(entry.entry_type != ENTRY_SEPARATOR ? entry.title : "");
    src += ">";
    if(entry.entry_type == ENTRY_SEPARATOR) {
      src += "<TD class=menutd NOWRAP VALIGN=TOP"+
        " ID="+entry.id_string+"MTD"+
        " HEIGHT="+(submenu.is_vertical ? entry.separator_size : "100%")+
        " WIDTH="+(submenu.is_vertical ? "100%" : entry.separator_size)+
        ">";
      src += make_html_img(entry.separator_image,entry.id_string+"LINE",entry.separator_image_width,entry.separator_image_height,0);
      src += "</TD>";
    } else {
      if (submenu.is_vertical && submenu.left_margin_width || !submenu.is_vertical && entry.icon_width) {
        src += "<TD class=menutd NOWRAP ALIGN=CENTER VALIGN=MIDDLE HEIGHT=100%";
        src += " STYLE=\"padding:"+submenu.entry_padding+"px\"";
        src += " ID="+entry.id_string+"LTD";
        src += get_entry_left_width_string(entry);
        src += ">";
        src += make_html_img(entry.icon[0],entry.id_string+"ICON",entry.icon_width,entry.icon_height,entry.icon_border);
        src += "</TD>";
      }
      src += "<TD class=menutd NOWRAP HEIGHT=100% STYLE=\"";
      if (submenu.is_static && submenu.width) src += "width:"+(submenu.width-get_entry_left_width(entry)-get_entry_right_width(entry)-(UA_IEXPLORER?6:0))+"px;";
      src += "color:"+entry.text_color[0]+";";
      src += "padding:"+submenu.entry_padding+"px;";
      src += "\"";
      src += " ID="+entry.id_string+"MTD";
      src += " ALIGN="+entry.horizontal_alignment;
      src += " VALIGN="+entry.vertical_alignment+">";
      src += "<FONT class=menufont ID="+entry.id_string+"TX STYLE=\""+get_entry_text_css(entry,0)+"\">";
      if(entry.entry_type == ENTRY_IMAGE)
        src += make_html_img(entry.image[0],entry.id_string+"IMG",entry.image_width,entry.image_height,entry.image_border);
      else
        src += entry.text;
      src += "</FONT>";
      src += "</TD>";
      if (submenu.is_vertical && submenu.right_margin_width || !submenu.is_vertical && entry.arrow_width) {
        src += "<TD class=menutd NOWRAP ALIGN=CENTER VALIGN=MIDDLE HEIGHT=100%";
        src += " STYLE=\"padding:"+submenu.entry_padding+"px\"";
        src += " ID="+entry.id_string+"RTD";
        src += get_entry_right_width_string(entry);
        src += ">";
        if (entry.arrow[0])
          src += make_html_img(entry.arrow[0],entry.id_string+"ARROW",entry.arrow_width,entry.arrow_height,entry.arrow_border);
        else if (!entry.submenu)
          src += "&nbsp;";
        else if (submenu.is_vertical)
          src += "&#9658;";
        else
          src += "&#9660;";
        src += "</TD>";
      }
    }
    src += "</TABLE>";
    if (!UA_OPERA&&!UA_IEXPLORER) src += "</DIV>";
    src += "</TD>";
  }
  return src;
}

function get_filter_css(submenu)
{
  var src="";
  if (UA_IEXPLORER_WIN && (UAVERSION>=5.0||!submenu.is_static)) {
    var dx = UAVERSION>=5.5?"progid:DXImageTransform.Microsoft." : "";
    src+="filter:";
    if (UAVERSION>=5.5) {
      if(submenu.effect_show!="Normal")
        src += submenu.effect_show+" ";
    } else {
      if (submenu.show_transition<24&&submenu.show_transition>=0)
        src += "revealTrans(Transition="+submenu.show_transition+",Duration="+((110-submenu.transition_speed)/100)+") ";
    }
    src += dx+"Alpha(opacity="+submenu.opacity+") ";
    if (submenu.dropshadow_distance) {
      if (submenu.dropshadow_transparent==1)
        src += dx+"dropshadow(color="+submenu.dropshadow_color+",offx="+submenu.dropshadow_distance+",offy="+submenu.dropshadow_distance+",positive=1) ";
      else
        src += dx+"Shadow(color="+submenu.dropshadow_color+",direction=135,strength="+submenu.dropshadow_distance+") ";
    }
    if (UAVERSION>=5.5) {
      if (submenu.effect_hide!="Normal")
        src += submenu.effect_hide+" ";
    } else {
      if (submenu.hide_transition<24&&submenu.hide_transition>=0)
        src += "revealTrans(Transition="+submenu.hide_transition+",Duration="+((110-submenu.transition_speed)/100)+") ";
    }
    src += ";";
  }
  return src;
}

function get_entry_css(entry)
{
  var src = "";
  if(entry.entry_type != ENTRY_SEPARATOR) {
    src += "border-style:"+entry.border_style+";";
    src += "border-width:"+entry.border_width+"px;";
    src += "border-color:"+entry.border_color[0]+";";
    if (!UA_IEXPLORER_MAC && entry.background_image[0]) {
      src += "background-image:url("+entry.background_image[0]+");";
      src += "background-repeat:"+entry.background_repeat[0]+";";
    }
  }
  if(UA_IEXPLORER_MAC && entry.entry_type != ENTRY_SEPARATOR)
    src += "background:"+entry.background[0]+";";
  else
    src += "background-color:"+entry.background_color[0]+";";
  src += "cursor:"+get_cursor_of(entry)+";";
  return src;
}

function get_entry_text_css(entry,active)
{
  var src = "";
  src += "cursor:"+get_cursor_of(entry)+";";
  src += "font:"+entry.text_font[active]+";";
  src += "text-decoration:"+entry.text_decoration[active]+";";
  if (!HAS_DOM||UA_NETSCAPE4) src += "background-color:transparent;color:"+entry.text_color[active];
  return src;
}

function handle_entry_mouseover(event,obj,entry)
{
  if (UA_IEXPLORER_WIN) {
    if (!entry.layer) entry.layer=obj;
    if(!get_parent_of(entry).is_showing || (event.fromElement && obj.contains(event.fromElement)))
      return;
  } else {
    if (!get_parent_of(entry).is_showing || (!UA_NETSCAPEISH && (event.fromElement && event.fromElement.id && event.fromElement.id.indexOf(entry.id_string)>=0)))
      return;
  }
  if (UA_NETSCAPE4) get_layer_of(entry).document.layers[0].captureEvents(Event.CLICK);
  var menu = get_menu_of(entry);
  var win = menu.source_frame;
  if (win != window) menu = get_target_menu_by_name(win,menu.name);
  if (menu.timer_hide) {
    win.clearTimeout(menu.timer_hide);
    menu.timer_hide=null;
  }

  var submenu = get_parent_of(entry);

  if (!submenu.click_to_open || get_menu_of(entry).submenu_click_opened) {
    if (submenu.active_entryid != entry.entryid) {
      if (submenu.active_entryid >= 0) {
        close_entry(submenu.entries[submenu.active_entryid]);
        submenu.active_entryid=-1;
      }
      open_entry(entry);
      submenu.active_entryid = entry.entryid;
    } else {
      submenu = get_target_submenu_below(entry);
      if (submenu && !submenu.is_showing) open_entry(entry);
    }
  }
  if(entry.status_text) window.status = entry.status_text;
}

function handle_entry_mouseout(event,obj,entry)
{
  if(UA_IEXPLORER_WIN) {
    if (!get_parent_of(entry).is_showing || event.toElement && obj.contains(event.toElement))
      return;
  } else {
    if (!get_parent_of(entry).is_showing || (!UA_NETSCAPEISH && (event.toElement && event.toElement.id && event.toElement.id.indexOf(entry.id_string) >= 0)))
      return;
  }
  if(UA_NETSCAPE4) get_layer_of(entry).document.layers[0].releaseEvents(Event.CLICK);
  var submenu = get_target_submenu_below(entry);
  if (!submenu || !submenu.is_showing) {
    set_entry_active(entry,0);
    get_parent_of(entry).active_entryid=-1;
  } else if (submenu && submenu.is_showing && !submenu.show_or_hide_complete) {
    close_entry(entry);
  }
  window.status="";
}

function handle_entry_click(event,obj,entry)
{
  if (event.button && event.button >= 2) return;
  var menu = get_menu_of(entry);
  var submenu = get_parent_of(entry);

  if (submenu.click_to_open) {
    menu.submenu_click_opened = !menu.submenu_click_opened;
    if (menu.submenu_click_opened) {
      open_entry(entry);
      submenu.active_entryid = entry.entryid;
    } else {
      close_entry(entry);
      submenu.active_entryid = -1;
    }
  }

  if (!UA_NETSCAPE4 && !(submenu.click_to_open && get_thisframe_submenu_below(entry)) && entry.url) {
    if (menu.source_frame != menu.target_frame) hide_all_submenus_of(menu,0);
    if (entry.url.toLowerCase().indexOf("javascript:") == 0)
      eval(entry.url.substring(11,entry.url.length));
    else if (entry.target == "_self")
      window.location.href = get_absolute_url(entry.url,menu,0);
    else if (entry.target=="_parent")
      window.parent.location.href = get_absolute_url(entry.url,menu,0);
    else if (entry.target=="_top")
      window.top.location.href = get_absolute_url(entry.url,menu,0);
    else {
      for (var w=window; w != w.parent; w = w.parent) {
        if (typeof(w.parent.frames[entry.target]) != "undefined") {
          w.parent.frames[entry.target].location.href = get_absolute_url(entry.url,menu,0);
          return;
        }
      }
      window.open(get_absolute_url(entry.url,menu,0),entry.target);
    }
  }
}

function handle_submenu_mouseover(event,obj,submenu)
{
  if (UA_IEXPLORER_WIN) {
    if (!submenu.layer) submenu.layer = obj;
    if (!submenu.is_showing || (event.fromElement && obj.contains(event.fromElement)))
      return;
  } else {
    if (!submenu.is_showing || (!UA_NETSCAPEISH && (e.fromElement && e.fromElement.id && e.fromElement.id.indexOf(submenu.id_string)>=0)))
        return;
  }
  var menu = get_menu_of(submenu);
  var win = menu.source_frame;
  if (win != window)
    menu = get_target_menu_by_name(win,menu.name);
  if (menu.timer_hide) {
    win.clearTimeout(menu.timer_hide);
    menu.timer_hide=null;
  }
}

function handle_submenu_mouseout(event,obj,submenu)
{
  if(UA_IEXPLORER_WIN) {
    if (!submenu.is_showing || (event.toElement && obj.contains(event.toElement)))
      return;
  } else {
    if (!submenu.is_showing || (!UA_NETSCAPEISH && (event.toElement && event.toElement.id && event.toElement.id.indexOf(submenu.id_string)>=0)))
      return;
  }
  var menu = get_menu_of(submenu);
  var win = menu.source_frame;
  if (win!=window)
    menu = get_target_menu_by_name(win,menu.name);
  if (menu.timer_hide)
    win.clearTimeout(menu.timer_hide);
  menu.timer_hide = win.setTimeout("hide_all_submenus_of(all_menus['"+menu.menuid+"'],0);",menu.hide_delay);
}

function set_entry_active(entry,is_active)
{
  if(UA_NETSCAPE4) {
    var layers = get_entry_layers(entry);
    layers[is_active].parentLayer.bgColor = entry.border_color[is_active];
    layers[is_active].display = 'block';//visibility = "show";
    layers[1-is_active].display = 'none';//visibility = "hide";
  } else {
    var lstyle = get_layer_of(entry).style;
    if (UA_IEXPLORER_MAC) {
      if (entry.background[0] != entry.background[1]) lstyle.background = entry.background[is_active];
    } else {
      if (entry.background_color[0] != entry.background_color[1]) {
        if (UA_OPERA && UAVERSION < 6)
          lstyle.background = entry.background_color[is_active];
        else
          lstyle.backgroundColor = entry.background_color[is_active];
      }
      if (entry.background_image[0] != entry.background_image[1]) lstyle.backgroundImage="url("+(entry.background_image[is_active]?entry.background_image[is_active]:get_menu_of(entry).transparent_pixel)+")";
      if (entry.background_repeat[0] != entry.background_repeat[1]) lstyle.backgroundRepeat = entry.background_repeat[is_active];
    }

    if (entry.border_color[0] != entry.border_color[1]) lstyle.borderColor=entry.border_color[is_active];

    var tmp;

    if (entry.icon[0] != entry.icon[1]) {
      tmp = get_object_by_id(entry.id_string+'ICON','IMG');
      if (tmp) tmp.src = entry.icon[is_active];
    }
    if (entry.arrow[0] != entry.arrow[1]) {
      tmp = get_object_by_id(entry.id_string+'ARROW','IMG');
      if (tmp) tmp.src = entry.arrow[is_active];
    }
    if (entry.entry_type == ENTRY_IMAGE && entry.image[0] != entry.image[1]) {
      tmp = get_object_by_id(entry.id_string+'IMG','IMG');
      if (tmp) tmp.src=entry.image[is_active];
    }
    tmp = entry.textstyle = get_object_by_id(entry.id_string+"TX",'FONT').style;
    if (entry.text_font[0]!=entry.text_font[1])
      tmp.font=entry.text_font[is_active];
    if (entry.text_decoration[0]!=entry.text_decoration[1])
      tmp.textDecoration=entry.text_decoration[is_active];
    if (UA_OPERA) get_object_by_id(entry.id_string+'MTD','td').style.color = entry.text_color[is_active];
    else tmp.color=entry.text_color[is_active];
  }
}

function show_real_submenu(submenu)
{
  show_submenu(submenu);
}

function hide_real_submenu(submenu)
{
  if(submenu.active_entryid >= 0) {
    var opensubmenu = get_thisframe_submenu_below(submenu.entries[submenu.active_entryid]);
    if (opensubmenu && opensubmenu.is_showing) hide_real_submenu(opensubmenu);
    set_entry_active(submenu.entries[submenu.active_entryid],0);
    submenu.active_entryid=-1;
  }
  hide_submenu(submenu);
}

function open_entry(entry)
{
  var win = get_menu_of(entry).target_frame;
  var submenu = get_target_submenu_below(entry);
  if (submenu && !submenu.is_showing) win.show_real_submenu(submenu);
  set_entry_active(entry,1);
}

function close_entry(entry)
{
  var win = get_menu_of(entry).target_frame;
  var submenu = get_target_submenu_below(entry);
  if (submenu && submenu.is_showing) win.hide_real_submenu(submenu);
  set_entry_active(entry,0);
}

function show_submenu(submenu)
{
  var delay = (submenu.submenuid && get_parent_of(get_parent_of(submenu)).is_vertical ? get_menu_of(submenu).delay_vertical : get_menu_of(submenu).delay_horizontal);
  submenu.show_or_hide_complete=0;
  if (!submenu.rect) get_position_of(submenu);
  if (submenu.timer_show) {
    clearTimeout(submenu.timer_show);
    submenu.timer_show=null;
    hideshow_covered_elements(1,submenu);
  }
  if (delay > 0) submenu.timer_show = setTimeout(get_event_hideshow_code(submenu,1),delay);
  submenu.is_showing = 1;
  if (delay <= 0) eval(get_event_hideshow_code(submenu,1));
}

function hide_submenu(submenu)
{
  if (submenu.timer_show) {
    clearTimeout(submenu.timer_show);
    submenu.timer_show=null;
  }
  if (submenu.is_showing && !submenu.show_or_hide_complete) {
    submenu.show_or_hide_complete=0;
    submenu.is_showing=0;
  } else {
    submenu.show_or_hide_complete=0;
    submenu.is_showing=0;
    eval(get_event_hideshow_code(submenu,0));
  }
}

function show_normal(submenu)
{
  var layer = get_layer_of(submenu);
  if (UA_NETSCAPE4) {
    layer.display = 'block';//visibility='show';
    if (!submenu.fixed) {
      layer.resizeBy(submenu.border_width*2,submenu.border_width*2);
      layer = layer.document.layers[0];
      layer.moveTo(submenu.border_width,submenu.border_width);
      layer.onmouseover = handler_SUBMENUOVER;
      layer.onmouseout = handler_SUBMENUOUT;
      for (var i=submenu.entries.length-1; i >=0 ; i--) {
        var entry = submenu.entries[i];
        if (entry.entry_type != ENTRY_SEPARATOR) {
          var layers = get_entry_layers(entry);
          layers[2].resizeTo(layers[0].parentLayer.clip.width,layers[0].parentLayer.clip.height);
          if (get_cursor_of(entry)=="hand") {
            with (layers[2].document) {
              open();
              write("<A "+get_entry_href_string(entry)+"\"><IMG BORDER=0 SRC='"+get_menu_of(entry).transparent_pixel+"' WIDTH="+layers[2].clip.width+" HEIGHT="+layers[2].clip.height+"></A>");
              close();
            }
          }
          layers[0].resizeBy(-entry.border_width,-entry.border_width);
          layers[1].resizeBy(-entry.border_width,-entry.border_width);
          layer = get_layer_of(entry).document.layers[0];
          layer.onmouseover = handler_ENTRYOVER;
          layer.onmouseout = handler_ENTRYOUT;
          layer.onclick = handler_ENTRYCLICK;
        }
      }
      if(submenu.border_width)
        setTimeout("var subm=all_menus["+submenu.menuid+"].submenus["+submenu.submenuid+"];get_layer_of(subm).bgColor=subm.border_color;",1);
      submenu.fixed=1;
    }
  } else {
    layer.style.display = 'block';//visibility = 'visible';
    if (UA_IEXPLORER5) layer.filters['Alpha'].opacity = submenu.opacity;
  }
}

function hide_normal(submenu)
{
  var layer = get_layer_of(submenu);
  if (UA_NETSCAPE4) {
    layer.display = 'none';//visibility='hide';
  } else {
    if (UA_IEXPLORER5) layer.filters['Alpha'].opacity=0;
    layer.style.display = 'none';//visibility='hidden';
  }
}

function hide_all_submenus_of(menu, force)
{
  var win = menu.source_frame;
  var smenu = (win==window?menu:get_target_menu_by_name(win,menu.name));
  smenu.submenu_click_opened=0;
  var submenu = smenu.submenus[0];
  if (submenu.is_showing) {
    if (submenu.active_entryid >= 0) {
      win.close_entry(submenu.entries[submenu.active_entryid]);
      submenu.active_entryid=-1;
    }
    if (smenu.type == MENU_ABSOLUTE && force)
      win.hide_submenu(submenu);
  }
  smenu.timer_hide=null;
}

function normal_show(submenu)
{
  var menu = get_menu_of(submenu);
  //if (menu.source_frame != window) {
  //menu.source_frame.normal_show(menu.source_frame.get_menu_by_name(menu.name).submenus[submenu.submenuid]);
  //}
  set_position(get_position_of(submenu),submenu);
  hideshow_covered_elements(-1,submenu);
  show_normal(submenu);
}

function normal_hide(submenu)
{
  hide_normal(submenu);
  hideshow_covered_elements(1,submenu);
}

function filtered_show(submenu)
{
  if(UAVERSION<5.5) show_filtered(submenu);
  else if(HAS_FILTERS) eval("try{show_filtered(submenu);} catch(er){HAS_FILTERS=0;normal_show(submenu);}");
  else normal_show(submenu);
}

function filtered_hide(submenu)
{
  if (UAVERSION<5.5) hide_filtered(submenu);
  else if(HAS_FILTERS) eval("try{hide_filtered(submenu);}catch(er){HAS_FILTERS=0;normal_hide(submenu);}");
  else normal_hide(submenu);
}

function show_filtered(submenu)
{
  var filter = get_layer_of(submenu).filters[0];
  if (UAVERSION>=5.5) filter.enabled=1;
  if (filter.Status!=0) filter.stop();
  set_position(get_position_of(submenu),submenu);
  hideshow_covered_elements(-1,submenu);
  filter.apply();
  show_normal(submenu);
  filter.play();
}

function hide_filtered(submenu)
{
  var filter = get_layer_of(submenu).filters[get_layer_of(submenu).filters.length-1];
  if (UAVERSION>=5.5) filter.enabled=1;
  if (filter.Status != 0) filter.stop();
  filter.apply();
  hide_normal(submenu);
  hideshow_covered_elements(1,submenu);
  filter.play();
}

function browser_detect()
{
  var v = navigator.appVersion;
  var a = navigator.userAgent;

  OS_MAC = v.indexOf("Mac")>=0;
  UA_OPERA = a.indexOf("Opera")>=0;
  UA_KONQUEROR = a.indexOf("Konqueror")>=0;

  if (UA_OPERA) {
      UAVERSION = parseFloat(a.substring(a.indexOf("Opera ")+6,a.length));
      UA_OPERA5 = UAVERSION >= 5.12 && !OS_MAC && a.indexOf("MSIE 5.0") >= 0;
      if (UAVERSION>=7) UA_OPERA5=1;
  } else {
      UA_IEXPLORER = (document.all && !UA_KONQUEROR ? 1 : 0);

      if (UA_IEXPLORER) {
          UA_IEXPLORER4 = (v.substring(0,1)+0 >= 4);
          UAVERSION = parseFloat(a.substring(a.indexOf("MSIE ")+5,a.length));
          UA_IEXPLORER5 = UAVERSION >= 5.0 && UAVERSION < 5.5 && !OS_MAC;
          UA_IEXPLORER_MAC = UA_IEXPLORER4 && OS_MAC;
          UA_IEXPLORER_WIN = UA_IEXPLORER4 && !OS_MAC;

      } else {

        UA_NETSCAPE4 = navigator.appName.toLowerCase()=="netscape"&&v.substring(0,1)=="4" ? 1 : 0;

        if(!UA_NETSCAPE4) {
          UA_GECKO = (document.getElementsByTagName("*") && a.indexOf("Gecko")!=-1);
          if(UA_GECKO) {
            UAVERSION = parseInt(navigator.productSub);
            if (a.indexOf("Netscape")>=0) {
              DEL_BORDER = UAVERSION<20001108+1;
              ADD_BORDER = UAVERSION>20020512-1;
            } else {
              DEL_BORDER = UAVERSION<20010628+1;
              ADD_BORDER = UAVERSION>20011221-1;
            }
          }
        } else {
          UAVERSION = parseFloat(v);
        }
        UA_NETSCAPEISH = UA_NETSCAPE4||UA_GECKO||UA_KONQUEROR;
      }
  }
  HAS_DOM = UA_OPERA5||UA_IEXPLORER4||UA_NETSCAPEISH;
}

function check_position()
{
  var w = current_width;
  var h = current_height;
  var x = current_xpos;
  var y = current_ypos;

  current_width = get_window_width();
  current_height = get_window_height();
  current_xpos = get_window_xpos();
  current_ypos = get_window_ypos();

  if (((UA_OPERA && UAVERSION<7.0) || UA_NETSCAPE4) && (current_width-w || current_height-h))
    document.location.reload();
  else if (current_xpos-x || current_ypos-y)
    handler_SCROLLED();
}

function initialize()
{
  try {
  if (UA_IEXPLORER_MAC || UA_OPERA5 || UA_NETSCAPEISH || (UA_IEXPLORER_WIN && UAVERSION < 5.0)) {
    if (current_menutagtext) document.body.insertAdjacentHTML('BeforeEnd',current_menutagtext);
    for (var i=0; i<all_menus.length; i++) initialize_menu(all_menus[i]);
  }
  } catch (ex) {
  }

  is_initialized=1;

  if (!UA_NETSCAPE4) {
    for (var i=0; i<all_menus.length; i++) {
      var menu = all_menus[i];
      for(var j=0; j<menu.submenus.length; j++) {
        var submenu=menu.submenus[j];
        if (submenu.is_showing && submenu.show_or_hide_complete)
          hideshow_covered_elements(-1,submenu);
      }
    }
  }
}

function initialize_menu(menu)
{
  var entry = menu.submenus[menu.submenus.length-1].entries[menu.submenus[menu.submenus.length-1].entries.length-1];

  while (1) if (get_layer_of(entry)) break;

  if (!UA_NETSCAPE4) initialize_size(menu);

  if (menu.type != MENU_ABSOLUTE && window == menu.source_frame) show_submenu(menu.submenus[0]); 

  if (UA_IEXPLORER || UA_GECKO || UA_KONQUEROR) {
    window.onscroll = new Function("if (timer_scroll_menuclose) clearTimeout(timer_scroll_menuclose); timer_scroll_menuclose = setTimeout('handler_SCROLLED();', UA_IEXPLORER_MAC?500:0);");

  } else if (!timer_check_position) {
    current_width = get_window_width();
    current_height = get_window_height();
    current_xpos = get_window_xpos();
    current_ypos = get_window_ypos();
    timer_check_position = setInterval("check_position();",500);
  }
  menu.ready = 1;
}

function initialize_size(menu)
{
  for (var i=0; i<menu.submenus.length; i++) {
    var submenu = menu.submenus[i];
    if (UA_OPERA && UAVERSION<6.0)
      get_layer_of(submenu).style.pixelWidth = parseInt(get_object_by_id(submenu.id_string+"TB",'table').style.pixelWidth);
    
    if (UA_IEXPLORER5)
      get_layer_of(submenu).style.width = get_layer_of(submenu).offsetWidth;
    
    else if (UA_IEXPLORER_MAC || !UA_IEXPLORER) {
      if (!submenu.is_vertical) {
        var first = get_object_by_id(submenu.id_string+"0");
        var height = parseInt(UA_OPERA ? first.style.pixelHeight : first.offsetHeight);
        if (height) {
          for (var j=0; j<submenu.entries.length; j++) {
            var entry = submenu.entries[j];
            var style = get_layer_of(entry).style;
            var totalheight = height-2*submenu.padding;
            
            if(UA_OPERA) style.pixelHeight = totalheight;
            else if (entry.entry_type == ENTRY_SEPARATOR||UA_IEXPLORER) style.height = totalheight+'px';
            else style.height = totalheight-2*entry.border_width+'px';
            
            if(UA_IEXPLORER_MAC) {
              var ltd = get_object_by_id(entry.id_string+"LTD");
              var rtd = get_object_by_id(entry.id_string+"RTD");
              if (ltd) ltd.style.height = totalheight+'px';
              get_object_by_id(entry.id_string+"MTD").style.height = totalheight+'px';
              if (rtd) rtd.style.height = totalheight+'px';
            }
          }
        }

      } else if (UA_OPERA) {
        for (var j=0; j<submenu.entries.length; j++) {
          var entry = submenu.entries[j];
          if (entry.entry_type != ENTRY_SEPARATOR) {
            var entryobj = get_object_by_id(submenu.id_string+j);
            var entrylayer = get_layer_of(entry);
            var w = parseInt(entryobj.style.pixelWidth);
            var h = parseInt(entrylayer.style.pixelHeight);
            if (w) entrylayer.style.pixelWidth = w-2*submenu.padding;
            if (h) entrylayer.style.pixelHeight = h;
          }
        }
      }
    }
  }
}

function handler_SCROLLED()
{
  for (var i=0; i<all_menus.length; i++) {
    var menu = all_menus[i];
    if (menu) {
      hide_all_submenus_of(menu,0);
      if(menu.type == MENU_FIXED) {
        var submenu = menu.submenus[0];
        hideshow_covered_elements(1,submenu);
        set_position(get_position_of(menu.submenus[0]),submenu);
        hideshow_covered_elements(-1,submenu);
      }
    }
  }
}

function hideshow_covered_elements(count,submenu)
{
  var menu = get_menu_of(submenu);
  if (!is_initialized || UA_NETSCAPE4 || UA_OPERA || submenu.is_static) return;
  if (menu.hide_selects && !UA_GECKO) {
    hideshow_tag_if_covered("SELECT",count,submenu);
    if (UA_KONQUEROR) {
      hideshow_tag_if_covered("INPUT",count,submenu);
      hideshow_tag_if_covered("TEXTAREA",count,submenu);
      hideshow_tag_if_covered("BUTTON",count,submenu);
    }
  }
  if (menu.hide_objects) hideshow_tag_if_covered("OBJECT",count,submenu);
  if (menu.hide_iframes && !UA_GECKO && !(UA_IEXPLORER_WIN && UAVERSION >= 5.5)) hideshow_tag_if_covered("IFRAME",count,submenu);
}

function hideshow_tag_if_covered(tag,count,obj)
{
  var elements = (UA_GECKO||UA_KONQUEROR) ? document.getElementsByTagName(tag) : document.all.tags(tag);
  for (var i=0; i<elements.length; i++) {
    var element = elements.item(i);
    var has_menu_parent = 0;

    for (var t = element.offsetParent; t; t = t.offsetParent)
        if (t.id && t.id.indexOf("Stm")>=0) has_menu_parent=1;

    if (has_menu_parent) continue;

    if (is_covered_by(element,obj)) {
      if (UA_KONQUEROR) {
        if (element.style.display == 'none'/*visibility == "hidden"*/) element.visibility_level = element.onload();
        else element.visibility_level = 0;
      }
      if (element.visibility_level)
        element.visibility_level += count;
      else
        element.visibility_level = count;

      if (UA_KONQUEROR) element.onload = eval("function() { return "+element.visibility_level+"; }");

      if (element.visibility_level == -1) {
        if (typeof(element.visibility_level_save) == 'undefined') element.visibility_level_save = element.style.display;//visibility;
        element.style.display = 'none';//visibility="hidden";
      } else if (element.visibility_level == 0) {
        element.style.display /*visibility*/ = element.visibility_level_save;
      }
    }
  }
}

function set_position(xy,submenu)
{
  if (xy && (submenu.submenuid || get_menu_of(submenu).type != MENU_INLINE)) {
    var layer = get_layer_of(submenu);
    if(UA_NETSCAPE4) {
      layer.moveToAbsolute(xy[0],xy[1]);
    } else if (UA_OPERA) {
      layer.style.pixelLeft = xy[0];
      layer.style.pixelTop = xy[1];
    } else {
      layer.style.left = xy[0]+'px';
      layer.style.top = xy[1]+'px';
    }
    submenu.rect=[xy[0],xy[1],submenu.rect[2],submenu.rect[3]];
  }
}

function get_event_hideshow_code(submenu,isshow)
{
  return "var subm=all_menus["+submenu.menuid+"].submenus["+submenu.submenuid+"];subm.timer_show=null;"+(isshow?submenu.event_function_show+"show(":submenu.event_function_hide+"hide(")+"subm);subm.show_or_hide_complete=1;";
}

function is_covered_by(element,obj)
{
  var x = 0;
  var y = 0;
  var w = element.offsetWidth;
  var h = element.offsetHeight;

  if (w) element._width_save = w;
  else w = element._width_save;
  if (h) element._height_save = h;
  else h = element._height_save;

  while (element) {
      x += element.offsetLeft;
      y += element.offsetTop;
      element = element.offsetParent;
  }

  return ((x<obj.rect[2]+obj.rect[0]) && (x+w>obj.rect[0]) && (y<obj.rect[3]+obj.rect[1]) && (y+h>obj.rect[1]));
}

function make_nn4_event_function(func,is_entry)
{
  var code = is_entry ? 'regex_ENTRY' : 'regex_SUBMENU';
  code += '.exec(this.parentLayer.id);menuid=RegExp.$1;submenuid=parseInt(RegExp.$2);';
  if (is_entry) code += 'eid=parseInt(RegExp.$3);return '+func+'(event,this,all_menus[menuid].submenus[submenuid].entries[eid]);';
  else code += 'return '+func+'(event,this,all_menus[menuid].submenus[submenuid]);';
  return new Function('event',s);
}

function get_entry_event_source(entry)
{
  if (entry.entry_type == ENTRY_SEPARATOR) return '';
  var src = " onMouseOver='handle_entry_mouseover(event,this,all_menus["+entry.menuid+"].submenus["+entry.submenuid+"].entries["+entry.entryid+"]);'";
  src += " onMouseOut='handle_entry_mouseout(event,this,all_menus["+entry.menuid+"].submenus["+entry.submenuid+"].entries["+entry.entryid+"]);'";
  src += " onClick='handle_entry_click(event,this,all_menus["+entry.menuid+"].submenus["+entry.submenuid+"].entries["+entry.entryid+"]);'";
  return src;
}

function quote_string(str)
{
  return "\""+str+"\"";
}

function get_entry_href_string(entry)
{
  return " HREF=" + quote_string(entry.url=="" ? "#" : entry.url.replace(new RegExp("\"","g"),"&quot;")) + " TARGET=" + quote_string(entry.url==""||entry.url.toLowerCase().indexOf('javascript:')==0 ? "_self" : entry.target);
}

function get_text_decoration_css(flags)
{
  if (!flags) return 'none';

  var src = '';
  if (flags&DECORATION_UNDERLINE) src += 'underline ';
  if (flags&DECORATION_LINETHROUGH) src += 'line-through ';
  if (flags&DECORATION_OVERLINE) src += 'overline';
  return src;
}

function make_html_img(imgsrc,id,width,height,border)
{
  var src = '<IMG SRC=';
  src += quote_string(imgsrc);
  if (id) src += ' ID='+id;
  if (width > 0) src += ' WIDTH='+width;
  else if(UA_NETSCAPEISH) src += ' WIDTH=0';
  if (height > 0) src += ' HEIGHT='+height;
  else if(UA_NETSCAPEISH) src += ' HEIGHT=0';
  src += ' BORDER='+border+'>';
  return src;
}

function make_css_bg(color,image,repeat)
{
  var src = color;
  if (image) src += " url("+image+") "+repeat;
  return src;
}

function get_cursor_of(entry)
{
  if (UA_GECKO) return "default";
  return entry.entry_type != ENTRY_SEPARATOR && ((entry.submenuid == 0 && get_menu_of(entry).click_for_submenu && get_thisframe_submenu_below(entry)) || entry.url) ? "hand" : "default";
}

function get_entry_left_width_string(entry)
{
  if (get_parent_of(entry).is_vertical)
    return get_parent_of(entry).left_margin_width > 0 ? " WIDTH="+(get_parent_of(entry).left_margin_width+2) : "";
  else
    return entry.icon_width > 0 ? " WIDTH="+(entry.icon_width+2) : "";
}

function get_entry_right_width_string(entry)
{
  if (get_parent_of(entry).is_vertical)
    return get_parent_of(entry).right_margin_width>0 ? " WIDTH="+(get_parent_of(entry).right_margin_width+2) : "";
  else
    return entry.arrow_width>0 ? " WIDTH="+(entry.arrow_width+2) : "";
}

function get_entry_left_width(entry)
{
  if (get_parent_of(entry).is_vertical)
    return get_parent_of(entry).left_margin_width > 0 ? (get_parent_of(entry).left_margin_width+2) : 0;
  else
    return entry.icon_width > 0 ? (entry.icon_width+2) : 0;
}

function get_entry_right_width(entry)
{
  if (get_parent_of(entry).is_vertical)
    return get_parent_of(entry).right_margin_width>0 ? (get_parent_of(entry).right_margin_width+2) : 0;
  else
    return entry.arrow_width>0 ? (entry.arrow_width+2) : 0;
}

function get_menu_of(thing)
{
  return all_menus[thing.menuid];
}

function get_parent_of(thing)
{
  if (typeof(thing.entryid) != "undefined") return all_menus[thing.menuid].submenus[thing.submenuid];
  else return !thing.parent ? null : all_menus[thing.parent[0]].submenus[thing.parent[1]].entries[thing.parent[2]];
}

function get_thisframe_submenu_below(entry)
{
  return !entry.submenu ? null : all_menus[entry.submenu[0]].submenus[entry.submenu[1]];
}

function get_window_xpos()
{
  return parseInt(UA_NETSCAPEISH||UA_OPERA ? window.pageXOffset : document.body.scrollLeft);
}

function get_window_ypos()
{
  return parseInt(UA_NETSCAPEISH||UA_OPERA ? window.pageYOffset : document.body.scrollTop);
}

function get_window_width()
{
  return parseInt(UA_NETSCAPEISH||UA_OPERA ? window.innerWidth : (UA_IEXPLORER_WIN&&document.compatMode=="CSS1Compat" ? document.documentElement.clientWidth : document.body.clientWidth));
}

function get_window_height()
{
  return parseInt(UA_NETSCAPEISH||UA_OPERA ? window.innerHeight : (UA_IEXPLORER_WIN&&document.compatMode=="CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight));
}

function get_object_by_id(id,tagname)
{
  if (UA_GECKO || UA_KONQUEROR)
    return document.getElementById(id);
  else if(UA_NETSCAPE4)
    return document.layers[id];
  else
    return tagname ? document.all.tags(tagname)[id] : document.all[id];
}

function get_layer_of(thing)
{
  if (typeof(thing.layer) != 'undefined' && typeof(thing.layer.offsetParent) == 'unknown') {
    delete thing.layer;
  }
//  if (typeof(thing.layer) == 'undefined' || typeof(thing.layer.offsetParent) == 'undefined') {
    if (typeof(thing.entryid)=='undefined')
      thing.layer = get_object_by_id(thing.id_string, DONTUSE_DIV ? 'table' : 'div');
    else
      thing.layer = UA_NETSCAPE4 ? get_layer_of(get_parent_of(thing)).document.layers[0].document.layers[thing.id_string] : get_object_by_id(thing.id_string,UA_IEXPLORER_WIN ? 'table' : null);
//  }
  return thing.layer;
}

function get_entry_layers(entry)
{
  return get_layer_of(entry).document.layers[0].document.layers;
}

function get_rect_of(thing)
{
  if (UA_NETSCAPE4) {
    var layer = get_layer_of(thing);
    return [layer.pageX,layer.pageY,layer.clip.width,layer.clip.height];
  } else {
    var x = 0,y = 0;
    var layer = get_layer_of(thing);
    var width = typeof(thing.rect)=="undefined"?parseInt(UA_OPERA&&UAVERSION<7?layer.style.pixelWidth:layer.offsetWidth):thing.rect[2];
    var height = typeof(thing.rect)=="undefined"?parseInt(UA_OPERA&&UAVERSION<7?layer.style.pixelHeight:layer.offsetHeight):thing.rect[3];

    while (layer) {
      x += parseInt(layer.offsetLeft);
      y += parseInt(layer.offsetTop);
      layer = layer.offsetParent;
    }
    if (UA_IEXPLORER_MAC) {
      x += parseInt(document.body.leftMargin);
      x -= thing.border_width;
      y -= thing.border_width;
    }
    if (typeof(thing.entryid)!='undefined') {
      if (DEL_BORDER) {
        x -= thing.border_width;
        y -= thing.border_width;
      }
      if (ADD_BORDER) {
        x += get_parent_of(thing).border_width;
        y += get_parent_of(thing).border_width;
      }
    }
    return [x,y,width,height];
  }
}

function get_position_of(submenu)
{
  var x = submenu.offset_x;
  var y = submenu.offset_y;
  var rect = get_rect_of(submenu);
  submenu.rect = rect;

  if (!submenu.submenuid) {
    if (get_menu_of(submenu).type == MENU_ABSOLUTE)
      return [get_menu_of(submenu).position_x,get_menu_of(submenu).position_y];
    else if (get_menu_of(submenu).type == MENU_FIXED)
      return [eval(get_menu_of(submenu).position_x),eval(get_menu_of(submenu).position_y)];
    else
      return [rect[0],rect[1]];
  }

  var entryrect = get_entry_rect(get_parent_of(submenu));
  var cx = get_window_xpos();
  var cy = get_window_ypos();
  var cxend = cx+get_window_width();
  var cyend = cy+get_window_height();

  if (submenu.direction == DIR_LEFT)
    x = submenu.offset_x + entryrect[0]-rect[2]+submenu.dropshadow_distance;
  else if (submenu.direction == DIR_RIGHT)
    x = submenu.offset_x + entryrect[0]+entryrect[2]-submenu.dropshadow_distance;
  else
    x = submenu.offset_x + entryrect[0]-submenu.dropshadow_distance;

  if (x+rect[2] > cxend) x = cxend - rect[2];
  if (x < cx) x = cx;

  if (submenu.direction == DIR_UP)
    y = submenu.offset_y+entryrect[1]-rect[3]+submenu.dropshadow_distance;
  else if (submenu.direction == DIR_DOWN)
    y = submenu.offset_y+entryrect[1]+entryrect[3]-submenu.dropshadow_distance;
  else
    y = submenu.offset_y+entryrect[1]-submenu.dropshadow_distance;

  if (y+rect[3] > cyend) y = cyend-rect[3];
  if (y < cy) y = cy;

  rect[0] = x;
  rect[1] = y;

  return [x,y];
}

function preload_image(src)
{
  if (src) {
      var img = new Image();
      image_cache[image_cache.length] = img;
      img.src = src;
  }
  return src;
}

function get_absolute_url(src,menu,notempty)
{
  if (src == '') return (notempty? menu.transparent_pixel : '');
  if (src.match(regex_ISABSOLUTE)) return src;
  return menu.url_base+src;
}

function hide_menu(name)
{
  var menu = get_menu_by_name(name);
  var win = menu.source_frame;
  if (win != window) menu = get_target_menu_by_name(win,name);
  if(menu.timer_hide) {
    win.clearTimeout(menu.timer_hide);
    menu.timer_hide = null;
  }
  win.hide_all_submenus_of(menu,1);
}

function get_target_menu_by_name(win,name)
{
  var ex;
  try {
    return win.get_menu_by_name(name);
  } catch (ex) {
    var menu = get_menu_by_name(name);
    menu.serial = 0;
    return menu;
  }
}

function get_menu_by_name(name)
{
  for (var i = all_menus.length-1; i >= 0; i--)
    if (all_menus[i].name == name) return all_menus[i];
  return null;
}

function get_target_submenu_below(entry)
{
  var menu = get_menu_of(entry);
  var win = menu.target_frame;
  if (entry.submenuid || win == window) return get_thisframe_submenu_below(entry);
  if (!get_target_menu_by_name(win,menu.name) || !menu.serial || (get_target_menu_by_name(win,menu.name).serial != menu.serial)) {
    try {
      win.take_menus(window);
    } catch (ex) {
      return null;
    }
  }
  menu = get_target_menu_by_name(win,menu.name);
  return win.get_thisframe_submenu_below(menu.submenus[entry.submenuid].entries[entry.entryid]);
}

function get_frame_x(win,menu)
{
  return (UA_KONQUEROR?win.screenX:(UA_IEXPLORER?win.screenLeft:eval(menu.screenX)));
}

function get_frame_y(win,menu)
{
  return (UA_KONQUEROR?win.screenY:(UA_IEXPLORER?win.screenTop:eval(menu.screenY)));
}

function get_entry_rect(entry)
{
  var menu = get_menu_of(entry);
  var win = menu.source_frame;
  if (entry.submenuid || win == window) return get_rect_of(entry);
  smenu = get_target_menu_by_name(win,menu.name);
  var rect = win.get_rect_of(entry);
  var x = rect[0] + get_frame_x(win,smenu) - get_frame_x(window,menu);
  var y = rect[1] + get_frame_y(win,smenu) - get_frame_y(window,menu);

  return [x,y,rect[2],rect[3]];
}
