/*  ----- Utils -----  */

  function Move ( elem, ox, oy , base, maxx) {
    if (base) {
      if (ox > 200) ox += base.offsetWidth - 400;
      if (oy > 200) oy += base.offsetHeight - 400;
      offsetOfIn(base, document.body);
      ox+= x;
      oy += y;
    }
    if (maxx ) {
      var baseElem = document.getElementById(maxx);
      if (baseElem) {
        var margin = baseElem.offsetWidth;
        if ( elem.childNodes[0].offsetWidth + ox > margin ) {
          offsetOfIn(baseElem, document.body);
          margin += x;
          if ( elem.childNodes[0].offsetWidth + ox > margin)
            ox = margin - elem.childNodes[0].offsetWidth;
        }
      }
    }
    elem.style.left = ox ;
    elem.style.top = oy ;
  }
  function offsetOfIn( elem, owner) {
    x = 0;  y = 0;
    while (elem != owner) {
      x += elem.offsetLeft;
      y += elem.offsetTop ;
      elem = elem.offsetParent;
//    if (elem != owner) { x += elem.clientLeft; y += elem.clientTop ; }
    }
  }
  function GetOrCreate(name, params) {
    name = NormalizeName(name);
    var elem = document.getElementById(name);
    if (!elem) {
      elem = document.getElementById("popup");
      if ( window[name] ) htmCode = window[name](params);
      else {
        var comp = site_components[name];
        if ( comp ) htmCode = ComposeHTML(name, params ? params : [] );
      }
      elem.innerHTML = htmCode;
		alert('GetOrCreate: '+htmCode);
    }
    return elem;
  }
  function GetPopup(id) {
    id = NormalizeName(id);
    var elem = document.getElementById(id);
    if (!elem) elem = document.getElementById("popup");
    return elem;
  }

/*  Menu Support */

var menuid = "", menuName=null, menuType=null; var menuToShow = [];

function PopupShow( popup, left, top ) {
  if (popup==null) return;
  popup.style.left=left;
  popup.style.top=top;
  popup.style.visibility="visible";
}
function PopupHide() {
  if (menuName != null) {
    var prefs = menuprefs[menuType];
    if (prefs && prefs.onHide)
      prefs.onHide(document.getElementById(menuName + prefs.base) );
    var popup = GetPopup(menuName);
    if (popup) popup.style.visibility="hidden";
  }
  menuName = menuType = null;
}
function OpenDlg(name, left, top, params) {
  PopupHide();
  var elem = GetOrCreate(name, params);
  PopupShow( elem, left, top );
  menuName = name;
  menuType = 0;
  MenuResetId();
  window.setTimeout("FocusFirst();", 200);
}
function MenuHide(closeid, typeLevel) {
  if (closeid != null && menuid != closeid) return;
  if (menuName == null || menuType == 0) return;
  if (menuType < typeLevel) return;
  PopupHide();
}
function MenuTimeout() {
  if (menuType == 0) return;
  menuToShow = null;
  window.setTimeout( "MenuHide('" + menuid + "');", 1000);
}
function MenuResetId() {
  menuid = "" + Math.random();
}
function MenuShow( name, type ) {
    if (name == menuName ) { // check if this menu is shown already
      MenuResetId();
      return;
    }
    if (menuType != null &&  menuType==0 ) return;
    PopupHide();
    var prefs = menuprefs[type];
    var elem =  GetOrCreate(name);
    var base = document.getElementById(name + prefs.base);
    if (prefs.onShow) prefs.onShow(base);
    Move(elem, prefs.x, prefs.y, base, prefs.max);
    if( navigator.userAgent.indexOf("Gecko") != -1)
      window.setTimeout("document.getElementById('"+elem.id+"').style.visibility='visible';", 10);
    else elem.style.visibility='visible';
    menuName = name;
    menuType = type;
    MenuResetId();
}
function MenuActive(name, type) {
  var showId = Math.random();
  menuToShow = [ showId, name, type];
  window.setTimeout( "MenuShowCheck(" + showId + ");", 200);
}
function MenuShowCheck(showId) {
  if (menuToShow != null && menuToShow[0] == showId)
    MenuShow(menuToShow[1], menuToShow[2]);
}
function FocusFirst(){
  var forms = document.forms;
  if (!forms.length) return;
  var elems=forms[forms.length-1].elements;
  for(i=0; i<elems.length; i++){
    if(elems[i].type && elems[i].type=="text") {
      elems[i].focus();
      return;
    }
  }
  if (elems.length>0) elems[0].focus();
}
var browseTest = 0;
function NormalizeName( name ) {
  return name;
/*  if (browseTest == 0) {
    browseTest = 1;
    var agent = navigator.userAgent;
    var str = "MSIE 5.";
    var idx = agent.indexOf(str);
    if (idx > 0 ) {
      if (agent.substr(idx += str.length , 1) != "5") browseTest = 2;
    }
    else {
      idx = agent.indexOf("Safari");
      if (idx >= 0) browseTest = 2;
    }

  }
  return browseTest == 1 ? name : name + "_h";
*/
}

/* --- Customizable ----  */

function SubmenuOver(elem) {
  elem.style.backgroundColor = "red";
}
function SubmenuOut(elem) {
  elem.style.backgroundColor = "";
}

function HideOnClick() {
  if (menuType == 0 && menuName == 'dlg')    return;
  PopupHide();
}


var menuprefs= [ {},
  {base: "base", x: -30, y: 24/*, onShow: SubmenuOver, onHide: SubmenuOut */ }

];