function Is()
 {
  var agent = navigator.userAgent.toLowerCase();
  this.major = parseInt(navigator.appVersion);
  this.ns  = ((agent.indexOf('mozilla')!=-1) && ((agent.indexOf('spoofer')==-1) && (agent.indexOf('compatible') == -1)));
  this.ns4 = (this.ns && (this.major >= 4) && (this.major < 5));
  this.ns6 = (this.ns && (this.major >= 5));
  this.ie   = (agent.indexOf("msie") != -1);
  this.ie6  = (this.ie && (navigator.appVersion.indexOf('MSIE 6.0') != -1));
  this.ie4  = (this.ie && (this.major >= 4) && !this.ie6);
 }

  //////////////////////////
 // The global variables //
//////////////////////////
var is = new Is();

var GM; // A global mouse kezelés

var FM; // Float menuk bázisa.

if(is.ie)
 {
  doc = "document.all['";
  ojj = "']";
  sty = "'].style.";
 }
else if(is.ns6)
 {
  doc = "document.getElementById('";
  ojj = "')";
  sty = "').style.";
 }

var anchorSim = 0;

// //////////////////// DEBUG //////////////////// //
var dbg_cnt = 0;

// if(is.ie4) document.onkeydown = KPO;

var lay = 0;
var lays = Array("fmenu1", "fmenu1x3", "fmenu1x3x4", "fmenu1x6", "fmenu2", "fmenu3", "fmenu3x1", "fmenu3x1x1");

function KPO(e)
 {
  var key = window.event.keyCode;
  var shift = window.event.shiftKey;
  switch(key)
   {
    case 100:
      break;
    case 83: // 's'
     SetPos(lays[lay], GetX(lays[lay])-(shift?10:1), GetY(lays[lay]));
     break;
    case 68: // 'd'
     SetPos(lays[lay], GetX(lays[lay])+(shift?10:1), GetY(lays[lay]));
     break;
    case 69: // 'e'
     SetPos(lays[lay], GetX(lays[lay]), GetY(lays[lay])-(shift?10:1));
     break;
    case 88: // 'x'
     SetPos(lays[lay], GetX(lays[lay]), GetY(lays[lay])+(shift?10:1));
     break;
    case 79: // 'o'
    case 85: // 'u'
     SetVis(lays[lay]);
     break;
    case 73: // 'i'
     SetHide(lays[lay]);
     break;
    case 81: // 'q'
     lay++;
     if(lay==lays.length) { lay = 0; }
//     break;
    case 80: // 'p'
     var s ='<font class="typer1">';
     for(var i=0; i<lays.length; i++) 
      { 
       if(i==lay) { s += '<font class="typer2">("'+lays[i]+'", tab_left+'+(GetX(lays[i])-tab_left)+', tab_top+'+(GetY(lays[i])-tab_top)+")</font><br>"; }
       else { s += '("'+lays[i]+'", tab_left+'+(GetX(lays[i])-tab_left)+', tab_top+'+(GetY(lays[i])-tab_top)+")<br>"; }
      }
     s += '</font>';
     document.all.temp.innerHTML = s;
     break;
   }
 }

function PO(objname, dest)
 {
  var i, j, io;
  var s="[["+objname+"]] ->";
  var eo=eval(objname);
  var ss = String();
  var re = new RegExp('\n', 'g');
  io = (typeof(dest) == 'object');
  j = 0;
  for (i in eo)
   {
    x=eval(objname+"['"+i+"']");
    ss = "";
    ss += x;
    ss = ss.replace(re, ' ');
    if(ss.length>64) { ss = ss.substr(0, 60)+' ...'; }
    
    s=s+i+'='+ss+'   ';
    if(j == 1) { s += io?'<br>':'\n'; j = 0; }
    else { j ++; }
   }

  if(io) dest.innerHTML = s;
  else alert(s);
 }

// //////////////// END DEBUG //////////////////// //

  ///////////////////////////
 // Nagyon Common rutinok //
///////////////////////////
function Nop()
 {
 }

function SetPos(ss, x, y)
 {
  eval(doc+ss+sty+"left='"+x+"px'");
  eval(doc+ss+sty+"top='"+y+"px'");
 }

function SetPosVis(ss, x, y)
 {
  eval(doc+ss+sty+"left='"+x+"px'");
  eval(doc+ss+sty+"top='"+y+"px'");
  eval(doc+ss+sty+"visibility='visible'");
 }

function SetVis(ss)
 {
  eval(doc+ss+sty+"visibility='visible'");
 }

function SetHide(ss)
 {
  eval(doc+ss+sty+"visibility='hidden'");
 }

function GetX(ss)
 {
  if(is.ie) { return(eval("document.all['"+ss+"'].offsetLeft")); }
  else if(is.ns6) { return(eval("document.getElementById('"+ss+"').offsetLeft")); }
  else { return(eval("document."+ss+".pageX")); }
 }

function GetY(ss)
 {
  if(is.ie) { return(eval("document.all['"+ss+"'].offsetTop")); }
  else if(is.ns6) { return(eval("document.getElementById('"+ss+"').offsetTop")); }
  else { return(eval("document."+ss+".pageY")); }
 }

function ExGetXY(ss)
 {
  var ojjektum = eval(doc+ss+ojj);
  var prevname, nowname;
  var x = 0, y = 0;
//  var s = "";

  prevname = "";
  do
   {
    nowname = ojjektum.nodeName;

//    s += nowname+' ('+ojjektum.offsetLeft+'; '+ojjektum.offsetTop+') - '+ ojjektum.style.position + ' - '+ ojjektum.style.marginTop + '<br>';
    if(!((nowname == 'TBODY') || (nowname == 'FORM') || (nowname == 'TR') || ((nowname == 'A') && (prevname == 'IMG'))))
     {
      x += ojjektum.offsetLeft;
      y += ojjektum.offsetTop;
     }
    prevname = nowname;
    ojjektum = ojjektum.parentNode;
   } while(nowname != 'BODY');

//  eval(doc+'temp'+ojj+'.innerHTML = s');

  rv = new Object();
  rv.x = x;
  rv.y = y;

  return(rv);
 }

function GetXs(ss)
 {
  if(is.ie) { return(eval("document.all['"+ss+"'].offsetWidth")); }
  else if(is.ns6) { return(eval("document.getElementById('"+ss+"').offsetWidth")); }
  else { return(eval("document."+ss+".document.width")); }
 }

function GetYs(ss)
 {
  if(is.ie) { return(eval("document.all['"+ss+"'].offsetHeight")); }
  else if(is.ns6) { return(eval("document.getElementById('"+ss+"').offsetHeight")); }
  else { return(eval("document."+ss+".document.height")); }
 }

function Clip(name, top, right, bottom, left)
 {
  if(is.ns4)
   {
    layer=eval(doc+name+sty+'clip');
    layer.top=top;
    layer.right=right;
    layer.bottom=bottom;
    layer.left=left;
   }
  else { eval(doc+name+sty+"clip='rect("+top+","+right+","+bottom+","+left+")'"); }
 }

function OverLayer(ss, x, y)
 {
  if(is.ie)
   {
    x0=eval("document.all['"+ss+"'].offsetLeft");
    x1=x0+eval("document.all['"+ss+"'].offsetWidth");
    y0=eval("document.all['"+ss+"'].offsetTop");
    y1=y0+eval("document.all['"+ss+"'].offsetHeight");
   }
  else if(is.ns4)
   {
    x0=eval("document."+ss+".pageX");
    x1=x0+eval("document."+ss+".document.width");
    y0=eval("document."+ss+".pageY");
    y1=y0+eval("document."+ss+".document.height");
   }
  else
   {
    x0=eval("document.getElementById('"+ss+"').offsetLeft");
    x1=x0+eval("document.getElementById('"+ss+"').offsetWidth");
    y0=eval("document.getElementById('"+ss+"').offsetTop");
    y1=y0+eval("document.getElementById('"+ss+"').offsetHeight");
   }

  if(x>x0 && x<x1 && y>y0 && y<y1) { return(1); }
  else { return(0); }
 }

function OpenImg(img, xs, ys) {
	OpenPopup("pic.jsp?im=" + img , "_blank", xs, ys, "");
}

function OpenPopup(htmname, winname, xs, ys, plus) {
	window.open(htmname, winname, "width="+xs+",height="+ys+",screenX=1,screenY=1,status=0,resizeable=0"+plus);
}

/*
Ez egy fakken wörkeráund. IE 5 alatt, az OnClick után hajtódik végre, az <a> href-je, 
ami menten fölül is írja a 'document.location.href' -et, így az oldal nem megy arréb. 
*/
function AnchorSimulator2(url, target)
 {
  if(target.toLowerCase() == '_blank') window.open(url, '_blank');
  else document.location.href = url;
 }

function AnchorSimulator(url, target)
 {
  if(is.ie4) setTimeout("AnchorSimulator2('"+url+"', '"+target+"')", 1);
  else AnchorSimulator2(url, target);
 }

  /////////////////////////////////////////////
 //  Szimpla Button Hilightek               //
/////////////////////////////////////////////
function TButton(onimg, offimg, lay, img)
 {
  this.on = new Image();
  this.on.src = onimg;
  this.off = new Image();
  this.off.src = offimg;
  this.sc = is.ns4?'document.'+lay+'.document.'+img+'.src=obj.':'document.images.'+img+'.src=obj.';
 }

function HilButt(obj, onoff)
 {
  eval(obj.sc+onoff+'.src');
 }

  //////////////////////////
 //    Floating menuk    //
//////////////////////////
function FMInitialize(styleplus, urlplus)
 {
  if(typeof styleplus == 'undefined') var styleplus = '';
  if(typeof urlplus == 'undefined') var urlplus = '';
  FM = new FMConstructor(styleplus, urlplus);

  GM.AddEvent('Move', 'FM.MouseHandler', 'document');
  GM.AddEvent('Up', 'FM.MouseClick', 'document');
 }

function FMConstructor(styleplus, urlplus)
 {
  this.styleplus = styleplus;
  this.urlplus = urlplus;

  this.Look = Array();
  this.Menus = Array();
  this.hideproc = 0;
  this.leftlimit = 0;
  this.rightlimit = 800;

  this.AddNew = FMAddNew;
  this.MouseHandler = FMMouseHandler;
  this.MouseClick = FMMouseClick;
  this.MouseElhagyott = FMMouseElhagyott;
  this.On = FMOn;
  this.OnLevel = FMOnLevel;
  this.Hide = FMHide;
  this.Over = FMOver;
  this.SetLimits = FMSetLimits;
  this.MenuItemOver = FMMenuItemOver;
  this.MenuItemOut = FMMenuItemOut;
 }

/* Be: name, név1, link1, submenu1 név2, link2, submenu2 ...
link - ha "<blank>"-al kezdődik, akkor új ablakba nyíló menü lesz.
submenu - az almenü neve, avagy '', ha nem tartozik ehhez a menühöz almenü

*/
function FMAddNew(name)
 {
  this.Menus[name] = new Object();

  this.Menus[name].name = name;
  this.Menus[name].labels = Array();
  this.Menus[name].lnks = Array();
  this.Menus[name].submenus = Array();

  for(var i = 0; i < (arguments.length - 1) / 3; i ++)
   {
    this.Menus[name].labels[i] = arguments[i*3+1];
    this.Menus[name].lnks[i] = arguments[i*3+2];
    this.Menus[name].submenus[i] = arguments[i*3+3];
   }
 }

function FMSetLimits(left, right)
 {
  this.leftlimit = left;
  this.rightlimit = right;
 }

function FMOn(name, rootname)
 {
  var r, xs;

  this.Hide(0);
  r = ExGetXY(rootname);
  this.Look[0] = new FMLookCreate('fmlayer0', this.Menus[name], 1, r.x, r.y+GetYs(rootname), this.styleplus, this.urlplus);
  if(((xs = GetXs('fmlayer0')) + r.x) > this.rightlimit) SetPos('fmlayer0', this.rightlimit - xs, r.y+GetYs(rootname))

  this.hideproc = 0;
 }

function FMOnLevel(name, level, imgname)
 {
  var r;

  // Először ellenőrizzük, hogy nem-e ugyanazt akarjuk kétszer megnyitni. 
  // Ez elég csúnya, mert villog, tehát ne tegyük.
  if((typeof this.Look[level] == 'object') && (this.Look[level].menu_ojj.name == name)) return;

  this.Hide(level);
  r = ExGetXY(imgname);
  this.Look[level] = new FMLookCreate('fmlayer'+level, this.Menus[name], level+1, r.x, r.y, this.styleplus, this.urlplus);

  this.hideproc = 0;
 }

function FMHide(level)
 {
//  PO('FM.Look');
//  alert(this.Look.length);
  for(i = level; i < this.Look.length; i++)
   {
    if(typeof this.Look[i] == 'object')
     {
      SetHide(this.Look[i].layer);
      delete this.Look[i];
     }
   }
  this.Look.length = level;
 }

function FMMouseHandler(x, y)
 {
  if(this.Look.length == 0) return;
  if(this.hideproc == 0)
   {
    if(this.Over(x, y)) this.hideproc = 1;
   }
  else if(!this.Over(x, y)) setTimeout("FM.MouseElhagyott()", 300);
 }

function FMMouseClick(x, y)
 {
  if(this.Look.length == 0) return;
  if(!this.Over(x, y)) this.Hide(0);
 }

function FMMouseElhagyott()
  {
   if(this.hideproc) this.MouseClick(GM.x, GM.y);
  }

function FMOver(x, y)
 {
  for(i = 0; i < this.Look.length; i++)
   {
    if((typeof this.Look[i] == 'object') && OverLayer(this.Look[i].layer, x, y)) return true;
   }
  return false;
 }

function FMMenuItemOver(tdobj, name, level, imgname)
 {
  tdobj.className = 'menutdhil'+this.styleplus;
  if(name != '') this.OnLevel(name, level, imgname);
  else this.Hide(level);
 }

function FMMenuItemOut(tdobj)
 {
  tdobj.className = 'menutd'+this.styleplus;
 }

function _FMApplyUrlPlus(url, plus)
 {
  url += ((url.indexOf('?') == -1)?'?':'&') + plus;
  
  return url;
 }

/********** FMLook **********/
function FMLookCreate(layer, menu_ojj, level, x, y, styleplus, urlplus)
 {
  var s = "";
  var anchor, jsanchor, mouseover;

  this.menu_ojj = menu_ojj;
  this.layer = layer;

  s += '<table border="0" cellpadding="2" cellspacing="0" class="menutable'+styleplus+'">\n';

  for(var i = 0; i < menu_ojj.labels.length; i++)
   {
    anchor = menu_ojj.lnks[i];
    if(anchor == '')
     {
      jsanchor = "";
      anchor = menu_ojj.labels[i];
     }
    else if(anchor.indexOf('<blank>') === 0)
     {
      jsanchor = " OnClick=\"AnchorSimulator('"+_FMApplyUrlPlus(anchor.substr(7), urlplus)+"', '_blank')\"";
      anchor = '<a href="#" class="menutda'+styleplus+'">'+menu_ojj.labels[i]+'</a>';
     }
    else
     {
      jsanchor = " OnClick=\"AnchorSimulator('"+_FMApplyUrlPlus(anchor, urlplus)+"', '')\"";
      anchor = '<a href="#" class="menutda'+styleplus+'">'+menu_ojj.labels[i]+'</a>';
     }

    if(menu_ojj.submenus[i] != '')
     {
      mouseover = "FM.MenuItemOver(this, '"+menu_ojj.submenus[i]+"', "+level+", 'subimg"+level+"x"+i+"')";
      s += '<tr>\n';
      s += ' <td class="menutd'+styleplus+'" OnMouseOver="'+mouseover+'" OnMouseOut="FM.MenuItemOut(this)"'+jsanchor+'>\n';
      s += '  <table border="0" cellpadding="0" cellspacing="0" width="100%"><tr>\n';
      s += '   <td class="menutdtxt'+styleplus+'">'+anchor+'</td>\n';
      s += '   <td align="right"><img src="img/null.gif" width="3" height="9" border=0 alt="" />';
      s += '<img src="img/menu-almenunyil.gif" width="9" height="9" border="0" alt="" id="subimg'+level+'x'+i+'" /></td>\n';
      s += '  </tr></table>\n';
      s += ' </td>\n';
      s += '</tr>\n';
     }
    else
     {
      s += '<tr><td class="menutd'+styleplus+'" OnMouseOver="FM.MenuItemOver(this, \'\', '+level+')" OnMouseOut="FM.MenuItemOut(this)"'+jsanchor+'>\n';
      s += ' <span class="menutdtxt'+styleplus+'">'+anchor+'</span>\n';
      s += '</td></tr>\n';
     }
   }

  s += '</table>\n';

//  eval(doc+layer+ojj+'.innerHTML = s');
  eval(doc+layer+ojj+'.innerHTML = s');
  SetPosVis(layer, x, y);
 }


  ////////////////////////////////////////
 // Ezek globális Mouse kezelő rutinok //
////////////////////////////////////////
function GMouseInit()
 {
  this.x=0;
  this.y=0;
  this.GMove=GMouse;
  this.GDown=GOnDown;
  this.GUp=GOnUp;
  this.AddEvent=GAddEvent;
  this.DeleteEvent=GDeleteEvent;

  this.CmdMove=Array();
  this.CmdDown=Array();
  this.CmdUp=Array();

  this.AreaMove=Array();
  this.AreaDown=Array();
  this.AreaUp=Array();
 }

function CreateGMouse()
 {
  GM = new GMouseInit();

  if(is.ie)
   { 
    document.onmousemove = function a(e) { GM.GMove(event.x, event.y); };
    document.onmouseup = function a(e) { GM.GUp(event.x, event.y); };
    document.onmousedown = function a(e) { GM.GDown(event.x, event.y); };
   }
  else
   {
    document.onmousemove = function a(e) { GM.GMove(e.pageX, e.pageY); };
    document.onmouseup = function a(e) { GM.GUp(e.pageX, e.pageY); };
    document.onmousedown = function a(e) { GM.GDown(e.pageX, e.pageY); };
    document.captureEvents(Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP);
   }
 }

function DestroyGMouse(refer)
 {
  var obj=eval(refer);

  // Minden alapállásba!
  if(is.ns4)
   {
    document.releaseEvents();
   }
  document.onmouseup = null;
  document.onmousedown = null;
  document.onmousemove = null;

  delete GM;
 }

function GMouse(x, y)
 {
  var i;

  this.x=x;
  this.y=y;
  for(i=0; i<this.CmdMove.length; i++)
   {
    if(this.CmdMove[i] && (this.AreaMove[i] == 'document' || OverLayer(this.AreaMove[i], x, y))) { eval(this.CmdMove[i]+'(x,y);'); }
   }
 }

function GOnUp(x, y)
 {
  var i;

  for(i=0; i<this.CmdUp.length; i++)
   {
    if(this.CmdUp[i] && (this.AreaMove[i] == 'document' || OverLayer(this.AreaUp[i], x, y))) { eval(this.CmdUp[i]+'(x,y);'); }
   }
 }

function GOnDown(x, y)
 {
  var i;

  for(i=0; i<this.CmdDown.length; i++)
   {
    if(this.CmdDown[i] && (this.AreaMove[i] == 'document' || OverLayer(this.AreaDown[i], x, y))) { eval(this.CmdDown[i]+'(x,y);'); }
   }
 }

function GAddEvent(evnt, Func, ActionArea)
 {
  if(evnt!='Up' && evnt!='Down' && evnt!='Move') { return; }

  eval("this.Cmd"+evnt+"[this.Cmd"+evnt+".length]=Func;");
  eval("this.Area"+evnt+"[this.Area"+evnt+".length]=ActionArea;");
 }

function GDeleteEvent(evnt, Func)
 {
  if(evnt!='Up' && evnt!='Down' && evnt!='Move') { return; }

  var l = eval("this.Cmd"+evnt+".length");
  for(var i=0; i<l; i++)
   {
    if(eval("this.Cmd"+evnt+"[i]==Func"))
     {
      if(is.ie)
       {
        eval("delete(this.Cmd"+evnt+"[i]);");
        eval("delete(this.Area"+evnt+"[i]);");
       }
      else
       {
        eval("this.Cmd"+evnt+".splice(i, 1);");
        eval("this.Area"+evnt+".splice(i, 1);");
       }
      break;
     }
   }
 }

