// Utils functions
function sbm_addEvent(obj, evType, fn) {
	var evTypeRef = '__' + evType;

	if (obj[evTypeRef]) {
		if (sbm_array_search(fn, obj[evTypeRef]) > -1) return;
	}	else {
		obj[evTypeRef] = [];
		if (obj['on'+evType]) obj[evTypeRef][0] = obj['on'+evType];
		obj['on'+evType] = sbm_handleEvent;
	}

	obj[evTypeRef][obj[evTypeRef].length] = fn;
}

function sbm_removeEvent(obj, evType, fn) {
	var evTypeRef = '__' + evType;

	if (obj[evTypeRef]) {
		var i = sbm_array_search(fn, obj[evTypeRef]);
		if (i > -1) delete obj[evTypeRef][i];
	}
}

function sbm_handleEvent(e) {
	e = e || window.event;
	var evTypeRef = '__' + e.type, retValue = true;

	for (var i = 0, j = this[evTypeRef].length; i < j; i++) {
		if (this[evTypeRef][i]) {
			this.__fn = this[evTypeRef][i];
			retValue = this.__fn(e) && retValue;
		}
	}

	if (this.__fn) try { delete this.__fn; } catch(e) { this.__fn = null; }

	return retValue;
}

function sbm_array_search(val, arr) {
	var i = arr.length;

	while (i--)
		if (arr[i] && arr[i] === val) break;

	return i;
}

function sbm_getObj(name) {
  if (document.getElementById) {
  	this.obj = document.getElementById(name);
    if (this.obj)
    	this.style = document.getElementById(name).style;
  }
  else if (document.all) {
    this.obj = document.all[name];
    if (this.obj)
      this.style = document.all[name].style;
  }
  else if (document.layers) {
   	this.obj = document.layers[name];
    if (this.obj)
     	this.style = document.layers[name];
  }
}

function sbm_invi(obj_id, flag) {
  var DHTML = (document.getElementById || document.all || document.layers);

//alert('Vanish '+obj_id+' '+flag);

	if (!DHTML) return;
	var x = new sbm_getObj(obj_id);

  if (x.obj) {
  	x.style.display = (flag) ? 'none' : 'block';
  }
}

function sbm_vanish(obj_id, flag) {
  var DHTML = (document.getElementById || document.all || document.layers);

	if (!DHTML) return;

	var x = new sbm_getObj(obj_id);

  if (x.obj) {
    var ieMat = new sbm_getObj(obj_id+'_iframe');
    if (ieMat.obj) {
      ieMat.style.left='-2px';
      ieMat.style.top='-2px';
      ieMat.style.width=(x.obj.offsetWidth+1)+'px';
      ieMat.style.height=(x.obj.offsetHeight+1)+'px';	
    	ieMat.style.visibility = (flag) ? 'hidden' : 'visible';
    }

  	x.style.visibility = (flag) ? 'hidden' : 'visible';

  }
}

function sbm_setimage(obj_id, src) {
  var DHTML = (document.getElementById || document.all || document.layers);

	if (!DHTML) return;
	var x = new sbm_getObj(obj_id);

  if (x.obj)
    x.obj.src = src;
}

function sbm_hidemenus(depth) {
  for (var i=0; i<16; i++) {
    sbm_invi('menu_' + i + '_' + depth, 1);
    sbm_setimage('arrow_' + i + '_' + depth, '/sbmlib/images/menuarrow1.gif');
  }
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function placemenu() {
  // First we place the menu
  __placemenu(this);
  
  // And attach the event to window resizing
  sbm_addEvent(window, 'resize', __placemenu);
}

function __placemenu(e) {
  var mc = new sbm_getObj('menu_goes_here');

  if (mc.obj) {
    var menudiv = new sbm_getObj('menudiv');

    if (menudiv.obj) {
      var leftpos = 0;
      var toppos = 0;
      var aTag;
      if (mc.obj.offsetParent) {
        aTag = mc.obj;
        while (aTag.offsetParent) {
          leftpos += aTag.offsetLeft;
          toppos += aTag.offsetTop;
          aTag = aTag.offsetParent;
        }
      } else if (mc.obj.x) {
        leftpos += mc.obj.x;
        toppos += mc.obj.y;
      }
      menudiv.style.left = leftpos + 'px';
      menudiv.style.top = toppos + 'px';
    }
  }
}

