var VEC_MENUES_DINAMICOS = new Array();
var TIPO_MENU_REACCION = 1; //Por defecto onmouseover

/*Detección de Versión de Internet Explorer*/
function detect_IE_version(){return (navigator.appName=='Microsoft Internet Explorer')?parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]):-1;}

function wm_url_onclick(ly, path, url)
{
    if (!VEC_MENUES_DINAMICOS[ly] || VEC_MENUES_DINAMICOS[ly]==null) return false;
    if (url!="" && Boolean(VEC_MENUES_DINAMICOS[ly][path]))
    {
			 var ie_ver = detect_IE_version();
	     if (ie_ver==-1 || ie_ver>6)
	     	location.href=url;
	     else
	     	document.write("<script type='text/javascript'>location.href='"+url+"';</script>");
		}
}
function write_menu(id,parent,tipo,ly,txt,url,img,mc_class,clase_seleccionado,MENU_CLASE_HREF,MENU_PRINCIPAL_CLASE_MOUSEOUT)
{
    if (VEC_MENUES_DINAMICOS[ly]==null)
        VEC_MENUES_DINAMICOS[ly] = new Array();

    var vectmp_parent = parent.split(".");
    var str_new_parent = "";
    if (vectmp_parent.length>2)
    {
        //Elimino el último elemento.
        vectmp_parent.splice((vectmp_parent.length-1),1);
        str_new_parent = vectmp_parent.join(".");
        VEC_MENUES_DINAMICOS[ly][str_new_parent]=1;
    } else {
        VEC_MENUES_DINAMICOS[ly][parent]=1;
    }

    if (str_new_parent=="")
        str_new_parent=parent;

    var out = getObj(ly);if (!out) return;
    var om,omc,ohref;
    var in_str="", out_str="";
    if (!txt)
        var txt="";
    if (!url)
        var url="";
    if (!img)
        var img="";

    if (!clase_seleccionado)
        clase_seleccionado="";

    var TIPO_MENU_PADRE=0;
    var TIPO_MENU_HIJO1=1;
    var TIPO_MENU_HIJO2=2;
    var TIPO_MENU_SEPARADOR=-1;

    var TAG_TXT="__MENU_TEXTO__";
    var TAG_URL="__MENU_LINK__";
    var TAG_IMG_SRC="__MENU_IMAGEN__";
    var TAG_IMG_OBJ="__M_IMAGEN__";

        var TAG_M_CONTENEDOR_PRINCIPAL="__MENU_CONTENEDOR_PRINCIPAL__"+ly;
        var TAG_M_CONTENEDOR_PADRE="__MENU_CONTENEDOR_PADRE__"+ly; //Este contiene solo al padre
        var TAG_HREF_PADRE="__HREF_PADRE__"+ly;
        var TAG_HREF_HIJO="__HREF_HIJO__"+ly;
        var TAG_HREF_HIJO2="__HREF_HIJO2__"+ly;

        var TAG_M_CONTENEDOR="__MENU_CONTENEDOR__"+ly;
        var TAG_M_CONTENEDOR_H1="__MENU_CONTENEDOR_HIJO1__"+ly;
        var TAG_M_CONTENEDOR_HIJOS_H1="__MENU_CONTENEDOR_HIJOS_DE_HIJO1__"+ly;

    var PREFIJO_MC_PRINCIPAL="MC_PRINCIPAL_";
    var PREFIJO_MC_PADRE="MC_PADRE";
    var PREFIJO_HREF_PADRE="HREF_PADRE_";
    var PREFIJO_HREF_HIJO="HREF_HIJO_";
    var PREFIJO_HREF_HIJO2="HREF_HIJO2_";
    var PREFIJO_MC="MC_";
    var PREFIJO_MC_H1="MC_H1_";
    var PREFIJO_MC_HIJOS_H1="MC_HIJOS_H1_";
    var PREFIJO_IMAGEN="OBJ_M_IMAGEN_"+ly;

        var PREFIJO_ID="";

        /* Agrego éste código por los ids q contienen letras ej. cat_ */
        if (id.indexOf("_")!=-1)
        {
            var vtemp = id.split("_");
            PREFIJO_ID=vtemp[0]+"_";
        }


    switch(tipo)
    {
        case TIPO_MENU_PADRE:
            om  = getObj("__MENU_PADRE__"+ly);
//            alert(om+"--->"+ly);
            if (!om)
                om  = getObj("__MENU_PADRE__");
                
            /*
            if (mc_class && mc_class!="")
                out.className=out.className+" "+mc_class;
            */
        break;

        case TIPO_MENU_HIJO1:
            om = getObj("__MENU_HIJO1__"+ly);
            if (!om)
                om = getObj("__MENU_HIJO1__");
                vec_path = parent.split(".");
                vec_path.splice(0,1);
                if (vec_path[0])
                    out=getObj(PREFIJO_MC+PREFIJO_ID+vec_path[0]);

                    /*
                    if (out==null)
                alert(id+"--->"+parent+"{"+txt+"}"+"-->path[0]:"+vec_path[0]+"-->"+mc_class+"--->["+PREFIJO_MC+PREFIJO_ID+vec_path[0]+"] ("+out+")");
            */
        break;

        case TIPO_MENU_HIJO2:
            om = getObj("__MENU_HIJO2__"+ly);
            if (!om)
                om = getObj("__MENU_HIJO2__");

                vec_path = parent.split(".");
                vec_path.splice(0,2);
                if (vec_path[0])
                    out=getObj(PREFIJO_MC_HIJOS_H1+PREFIJO_ID+vec_path[0]);

//              alert(id+"--->"+parent+"{"+txt+"}"+"-->path[0]:"+vec_path[0]+"-->"+mc_class+"--->["+PREFIJO_MC_HIJOS_H1+PREFIJO_ID+vec_path[0]+"] ("+out+")");

        break;

        default:
            om = getObj("__MENU_SEPARADOR__"+ly);
            if (!om)
                om = getObj("__MENU_SEPARADOR__");
        break;
    }
    in_str = om.innerHTML;

    out_str = str_replace(in_str,TAG_TXT,txt);
    out_str = str_replace(out_str,TAG_URL,url);
    out_str = str_replace(out_str,TAG_IMG_SRC,img);
    out_str = str_replace(out_str,TAG_IMG_OBJ,PREFIJO_IMAGEN+id);

    out_str = str_replace(out_str,TAG_M_CONTENEDOR_PRINCIPAL,PREFIJO_MC_PRINCIPAL+id);
    out_str = str_replace(out_str,TAG_M_CONTENEDOR_PADRE,PREFIJO_MC_PADRE+id);
    out_str = str_replace(out_str,TAG_HREF_PADRE,PREFIJO_HREF_PADRE+id);
    out_str = str_replace(out_str,TAG_HREF_HIJO,PREFIJO_HREF_HIJO+id);
    out_str = str_replace(out_str,TAG_HREF_HIJO2,PREFIJO_HREF_HIJO2+id);
    out_str = str_replace(out_str,TAG_M_CONTENEDOR,PREFIJO_MC+id);
    out_str = str_replace(out_str,TAG_M_CONTENEDOR_H1,PREFIJO_MC_H1+id);
    out_str = str_replace(out_str,TAG_M_CONTENEDOR_HIJOS_H1,PREFIJO_MC_HIJOS_H1+id);


    out_str = str_replace(out_str,"\"u\"","");

    var divel = document.createElement("DIV");
    divel.id = id;
    divel.innerHTML = out_str;

    if (TIPO_MENU_REACCION==0)
    {
        if (tipo==TIPO_MENU_HIJO1)
            setget_attr(divel,'onmouseover', 'sh_container("'+PREFIJO_MC_HIJOS_H1+id+'",1);');
        else
        {
            if (tipo==TIPO_MENU_PADRE)
            {
//              setget_attr(divel,'onmouseover', 'sh_container("'+PREFIJO_MC+id+'",1);this.className=this.className+" menuA01_active";');
            }
            else
                setget_attr(divel,'onmouseover', 'sh_container("'+PREFIJO_MC+id+'",1);');
        }
    }

    if (out!=null)
    out.appendChild(divel);

    /* Si es menu padre entonces agrego la clase */

    if (tipo==TIPO_MENU_PADRE && mc_class && mc_class!="")
    {
        var obj_MC=getObj(PREFIJO_MC+id);
        if (obj_MC!=null)
            if (obj_MC.className.indexOf(mc_class)==-1)
                obj_MC.className=obj_MC.className+" "+mc_class;
    }

/*******************************************************************************

        VER DE CAMBIAR
        var item_menu=getObj(id);

        POR UN CONTENEDOR DEL MENU EN SI
*******************************************************************************/

        var item_menu=getObj(id);

        /* Si tiene url la agrego */
        if (tipo==TIPO_MENU_PADRE)
        {
            item_menu_onclick = getObj(PREFIJO_MC_PADRE+id);

            /* AGREGO EVENTO ONMOUSEOVER SOBRE EL MENU PADRE */

            ohref = getObj(PREFIJO_HREF_PADRE+id);
            if (ohref!=null)
            {
                if (TIPO_MENU_REACCION==0)
                	setget_attr(ohref,'onmouseover', 'sh_container("'+PREFIJO_MC+id+'",1);su_class("'+PREFIJO_HREF_PADRE+id+'","'+MENU_CLASE_HREF+'",1)');
               	else
                	setget_attr(ohref,'onmouseover', 'su_class("'+PREFIJO_HREF_PADRE+id+'","'+MENU_CLASE_HREF+'",1);');
						}
        } else {

            if (tipo==TIPO_MENU_HIJO1)
            {
                item_menu_onclick = getObj(PREFIJO_MC_H1+id);
            }
            else
                item_menu_onclick = item_menu;
        }

        if (item_menu_onclick!=null)
        {
            var add_func="";
            var obj_href = null;
            if (ly=="menu_result")
            {
                //alert(txt+"--->"+url);
            }
            if (url!="")
            {
                //url = unescape(url);
                url=str_replace(url,"&amp;","&");
                add_func = "wm_url_onclick('"+ly+"','"+str_new_parent+"','"+url+"');";
            }
            else
            {
                        /*
                        if (ly=="productos_result")
                            alert(txt+":"+obj_href+" tipo:"+tipo+" url:"+url+" (add_func):"+add_func+" VEC_MENUES_DINAMICOS:"+VEC_MENUES_DINAMICOS[ly][parent]);

                        */
                if (Boolean(VEC_MENUES_DINAMICOS[ly][str_new_parent]) && TIPO_MENU_REACCION!=0)
                {
                    add_func="void(0);";
                }
            }

            if (add_func!="" || add_func=="void(0);")
            {
                if (tipo==TIPO_MENU_HIJO1)
                {
                    setget_attr(item_menu_onclick,'onclick', 'sh_container("'+PREFIJO_MC_HIJOS_H1+id+'",-1);'+add_func+'');
                    obj_href = getObj(PREFIJO_HREF_HIJO+id);
/*
                        if (ly=="productos_result")
                            alert(txt+":"+obj_href+" tipo:"+tipo+" url:"+url+" (add_func):"+add_func);
*/
                }
                else
                    if (tipo==TIPO_MENU_HIJO2)
                    {
                        setget_attr(item_menu_onclick,'onclick', ''+add_func+'');
                        obj_href = getObj(PREFIJO_HREF_HIJO2+id);
                        /*
                        if (ly=="productos_result")
                            alert(txt+":"+obj_href+" tipo:"+tipo+" url:"+url+" (add_func):"+add_func);
                        */
                    }
                    else
                        setget_attr(item_menu_onclick,'onclick', 'sh_container("'+PREFIJO_MC+id+'",-1);'+add_func+'');

                if (obj_href!=null)
                    setget_attr(obj_href,'href', url);

            }
            else
            {
                //anulo el click para los menues que no contienen url
                setget_attr(item_menu_onclick,'onclick', 'void(0);');
            }
        }

   //Seteo de clase para el menu activo
   if (clase_seleccionado!="" && item_menu_onclick!=null)
   {
        if (tipo==TIPO_MENU_PADRE)
        {
        // Averiguo el menu padre para dejarlo marcado
            var ohref = getObj(PREFIJO_HREF_PADRE+id);
            if (ohref!=null)
                su_class(ohref,clase_seleccionado,1);
        } else {
        	  // Aqui solo marco a los hijos seleccionados
            if (tipo==TIPO_MENU_HIJO1)
                su_class(PREFIJO_HREF_HIJO+id,clase_seleccionado,2);
            else
                su_class(PREFIJO_HREF_HIJO2+id,clase_seleccionado,2);
        }
     }

    /* En el mouseout del contenedor principal, lo oculto */
    var obj_cont = getObj(PREFIJO_MC_PRINCIPAL+id);

    if (tipo==TIPO_MENU_PADRE && obj_cont!=null)
    {
        if (TIPO_MENU_REACCION==0)
        {
            setget_attr(obj_cont,'onmouseout', 'if (checkMouseLeave(this, event)) { sh_container("'+PREFIJO_MC+id+'",0); if ("'+clase_seleccionado+'"=="") { su_class("'+PREFIJO_HREF_PADRE+id+'","'+MENU_PRINCIPAL_CLASE_MOUSEOUT+'",2); } }');
        }
    }

    //OCULTO LA IMAGEN DEL MENU PADRE EN CASO DE NO TENER IMAGEN
    if (tipo==TIPO_MENU_PADRE && img=="")
    {
        sh_container(PREFIJO_IMAGEN+id,0);
    }
}

function sh_container(ly,p)
{
//    alert(ly);
    if (typeof(ly)!="object")
        ly=getObj(ly);

    if (!ly || ly==null) return;

    //Excepción caso Onclick
    if (p==-1)
    {
        if (ly.style.display=="")
            ly.style.display="none";
        else
            ly.style.display="";
        return;
    }

    if (p)
    {
        ly.style.display="";
    }
    else
    {
        ly.style.display="none";
    }
}


function su_class(ly,cn,p)
{
    if (typeof(ly)!="object")
        ly=getObj(ly);

    if (!ly || ly==null) return;

//      alert("ly:"+ly.id+"*--"+cn+"");

    switch(p)
    {
        case 0: //QUITAR
            if (ly.className.indexOf(cn)!=-1)
                ly.className=ly.className.split(cn).join("");
            break;
        case 1: //AGREGAR
            if (ly.className.indexOf(cn)==-1)
                if (ly.className!="")
                    ly.className=ly.className+" "+cn;
                else
                    ly.className=cn;

            break;
        case 2: //SOBREESCRIBIR LAS CLASES
            ly.className=cn;
            break;
    }
//alert(ly.id+"-->"+ly.className+"\n"+ly.innerHTML);
}

/********************************************************************************/

function containsDOM (container, containee) {
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}

function checkMouseEnter (element, evt) {
  if (element.contains && evt.fromElement) {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseLeave (element, evt) {
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

