var debug = 0;
var fsmm = {};
var fsmom = [];
var fsmtime = [];
var mpos = {};
var mposoffset = {x:200,y:60};
var fsconf = { show:10,close:500 };

function fmenu(str)
{
    if(debug > 0){ fdebug('fmenu:' + str); };
    if(fsmm[str] == undefined){
        var txt = '';
        for(var i=0;i<fsm.length;i++){
            if(fsm[i].id == str && fsm[i].pg != undefined){
                txt += fmenustr(str, fsm[i].pg, '', 0);
            }
        }
        
    }
  	var argv = fmenu.arguments;  
	var argc = fmenu.arguments.length;
	if(argc > 2){
	    mpos[str] = {x:argv[1]+mposoffset.x,y:argv[2]+mposoffset.y};
	    if(fsmt[str].title.length > 15){
	        mpos[str].y -= 25;
	    }
    }
    f__timeout(str, 'show');
}

function openmenus()
{
    return fsmom;
}
function message(str)
{
    alert(str);
}
function fdebug(str)
{
    f_appendhtml('<p>' + str + '</p>', 'navdebug');
}
function fclose(str)
{
    if(debug > 0){ fdebug('fclose:' + str); };
    f__timeout(str, 'close');
}

function f__closeall()
{
    if(debug > 2){ fdebug('f__closeall'); };
    for (i=0;i < fsmtime.length; i++) {
        window.clearTimeout(fsmtime[i].timeout);
    }
    fsmtime = [];
    if (document.getElementById || document.all) {
        var id;
        for (i = 0; i < fsmom.length; i++){
            f__close(fsmom[i]);
        }
        fsmom = [];
    }
}
function f__closeallexcept(str)
{
    if(debug > 2){ fdebug('f__closeallexcept: ' + str); };
    var newnavtime = [];
    for (j=0;j < fsmtime.length; j++) {   
        if(str.indexOf(fsmtime[j].id.substr(1)) < 0){
            f__close('m' + fsmtime[j].id);
            window.clearTimeout(fsmtime[j].timeout);
        } else {
            newnavtime[newnavtime.length] = fsmtime[j];
        }
    }
    fsmtime = newnavtime;
    if (document.getElementById || document.all) {
        var newfsmom = [];
        for (j = 0; j < fsmom.length; j++){
            if(str.indexOf(fsmom[j].substr(1)) < 0){
                f__close(fsmom[j]);
            } else {
                newfsmom[newfsmom.length] = fsmom[j];
            }
        }
        fsmom = newfsmom;
    }
}

function f__timeout(str, action)
{
    if(debug > 1){ fdebug('f__timeout:' + str + ', ' + action); };
    var ids = new Array();
    ids = str.split(' ');
    var id = '';
    for(var i=0; i < ids.length;i++){
        id = ids[i];
        if(debug){ fdebug('  -> id:' + id); };
        if (id == ''){
            break;
        }
        f__cleartimeout(id);
        fsmtime[fsmtime.length] = {timeout:window.setTimeout("f__" + action +"('m" + id + "', '" + str + "');", fsconf[action]), id:id};
    }
}
function f__cleartimeout(id)
{
    if(debug > 2){ fdebug('f__cleartimeout:' + id); };
    var newnavtime = [];
    for (i=0;i < fsmtime.length; i++) {
        if (fsmtime[i].id == id) {
            window.clearTimeout(fsmtime[i].timeout);
        } else {
            newnavtime[newnavtime.length] = fsmtime[i];
        }
    }
    fsmtime = newnavtime;
}

function f__show(id, oid)
{
    if(debug > 0){ fdebug('f__show:' + id + ', ' + oid); };
    f__closeallexcept(oid);
    //f__cleartimeout(id);
    if (document.getElementById || document.all) {
        var objeto = xGetStyleObj(id);
        if(objeto) {
            fsmom[fsmom.length] = id;
        	if(mpos[id.substr(1)] != undefined){
        	    x = mpos[id.substr(1)].x;
        	    y = mpos[id.substr(1)].y;
        	} else {
                x = xPageX(id.substr(1));
                x += (fsmm[id.substr(1)].level > 0)?(160):(0);
                y = xPageY(id.substr(1));
                y += (fsmm[id.substr(1)].level == 0)?(22):(0);
        	}
            xMoveTo(id, x, y);
            objeto.display = "block";
        }
    }
    /*
    if(isflash[id.substr(1)] != undefined){
        fm.call('comfundo', id.substr(1));
    }*/
}
function f__close(id)
{
    if(debug > 0){ fdebug('f__close:' + id); };
    var objeto = xGetStyleObj(id);
    if(objeto) {
        objeto.display = "none";
    }
    /*
    if(isflash[id.substr(1)] != undefined){
        fm.call('semfundo', id.substr(1));
    }*/
}

function fmenustr(id, pg, oid, level)
{
    if(debug > 3){ fdebug('fmenustr:' + id + ',' + oid); };
    var str = '';
    str += '<div class="fsm" id="m' + id + '" name="m' + id + '">';
    oid += (oid.indexOf(id) < 0)?(id + ' '):('');
    var sub = '';
    for(var i=0;i<pg.length;i++){
        str += (fsma[pg[i].id] != undefined)?('<p><a style="font-weight:bold;color: #ff9933;"'):('<p><a');
        str += ' href="' + fsmt[pg[i].id].url + '"';
        if(pg[i].pg != null){
            str += ' name="' + pg[i].id + '" id="' + pg[i].id + '" onmouseover="fmenu(\'' + oid + pg[i].id + '\', ' + level + ');" onmouseout="fclose(\'' + oid + pg[i].id + '\');">';
            str += '<img src="/_images/more.png" width="6" height="12" border="0" alt=" » " align="right" />';
            sub += fmenustr(pg[i].id, pg[i].pg, oid + id + ' ', level + 1);
        } else {
            str += ' name="' + pg[i].id + '" id="' + pg[i].id + '" onmouseover="fmenu(\'' + oid + '\', ' + level + ');" onmouseout="fclose(\'' + oid + '\');">';
        }
        str += fsmt[pg[i].id].title + '</a></p>';
    }
    str += '</div>';
    fsmm[id] = {text:str, level:level};
    f_appendhtml(str, 'navmenus');
    str += sub;
    return str;
}

function f_appendhtml(text,identifier)
{
    if (document.getElementById) {
        var x = document.getElementById(identifier);
        x.innerHTML += text;
    } else if (document.all) {
        var x = document.all[identifier];
        x.innerHTML += text;
    } else if (document.layers) {
        var x = document.layers[identifier];
        text2 = '<p class="testclass">' + text + '</p>';
        x.document.open();
        x.document.write(text2);
        x.document.close();
    }
}

function xGetElementById(e) {
  if(typeof(e)!='string') return e;
  if(document.getElementById) e=document.getElementById(e);
  else if(document.all) e=document.all[e];
  else if(document.layers) e=xLayer(e);
  else e=null;
  return e;
}

function xChangeVisibility(e) {
 var argv = xChangeVisibility.arguments;
 var argc = xChangeVisibility.arguments.length;
 var xv = (argc > 1) ? argv[1] : null;
 var objeto;
    if (!(objeto=xGetStyleObj(e))){
        return false;
    } else {
        if (xv != null){
            objeto.display = xv;
        } else if (objeto.display == "none") {
            objeto.display = "block";
        } else {
            objeto.display = "none";
        }
        return true;
    }
}

function xGetStyleObj(e) {
    if(document.getElementById && document.getElementById(e)) {
        // W3C DOM
        return document.getElementById(e).style;
    } else if (document.all && document.all(e)) {
        // MSIE 4 DOM
        return document.all(e).style;
    } else if (document.layers && document.layers[e]) {
        // NN 4 DOM.. nota: os layers devem estar na raiz do body
        return document.layers[e];
    } else {
        return false;
    }
} // xGetStyleObj

function xPageX(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.pageX)) return e.pageX;
  var x = 0;
  while (e) {
    if (xDef(e.offsetLeft)) x += e.offsetLeft;
    e = xDef(e.offsetParent) ? e.offsetParent : null;
  }
  return x;
}
function xPageY(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.pageY)) return e.pageY;
  var y = 0;
  while (e) {
    if (xDef(e.offsetTop)) y += e.offsetTop;
    e = xDef(e.offsetParent) ? e.offsetParent : null;
  }
//  if (xOp7) return y - document.body.offsetTop; // v3.14, temporary hack for opera bug 130324
  return y;
}
function xStr(s) {
  return typeof(s)=='string';
}
function xNum(n) {
  return typeof(n)=='number';
}
// Position:
function xMoveTo(e,iX,iY) {
  xLeft(e,iX);
  xTop(e,iY);
}
function xLeft(e,iX) {
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if (css && xStr(e.style.left)) {
    if(xNum(iX)) e.style.left=iX+'px';
    else {
      iX=parseInt(e.style.left);
      if(isNaN(iX)) iX=0;
    }
  }
  else if(css && xDef(e.style.pixelLeft)) {
    if(xNum(iX)) e.style.pixelLeft=iX;
    else iX=e.style.pixelLeft;
  }
  else if(xDef(e.left)) {
    if(xNum(iX)) e.left=iX;
    else iX=e.left;
  }
  return iX;
}
function xTop(e,iY) {
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if(css && xStr(e.style.top)) {
    if(xNum(iY)) e.style.top=iY+'px';
    else {
      iY=parseInt(e.style.top);
      if(isNaN(iY)) iY=0;
    }
  }
  else if(css && xDef(e.style.pixelTop)) {
    if(xNum(iY)) e.style.pixelTop=iY;
    else iY=e.style.pixelTop;
  }
  else if(xDef(e.top)) {
    if(xNum(iY)) e.top=iY;
    else iY=e.top;
  }
  return iY;
}
function xDef() {
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}