﻿ //参数说明:
    //ParentElementId:父级ID
    //FnDefault:没有找到时的处理方法
    //FnSelect: 找到时的处理方法 ,会传入找到的a元素
    //特殊方法: 每个a元素都可以使用 .getLv(lv)
    function NavMenuClass(ParentElementId, FnDefault,FnSelect) {
            var _navArr = document.getElementById(ParentElementId).getElementsByTagName("a");
            var _allLvArr = null;
            var classNavCssI = 0;
            var _this = this;
            var _rootElement=document.getElementById(ParentElementId);
            if(_rootElement==null)
            {
                alert("找不到"+ParentElementId);
                return;
            }
            this.test = function (url, aHref) {
                if(/\.(html){0,1}$/.test(url)) //处理.htm
                {
                    //取出尾部的每一段
                    if(/[^/]+$/.exec(aHref)==null)
			return false;
                    var _endHref = /[^/]+$/.exec(aHref)[0].replace(/\.html{0,1}$/i,"");
                    var _endUrl = /[^/]+$/.exec(url)[0].replace(/\.html{0,1}$/i,"");                
                    var arr=_endHref.split("_");
                    var isMatch=true;
                    for(var i=0;i<arr.length;i++)
                    {
                        var regex=new RegExp(arr[i],"i");
                        if(!regex.test(_endUrl))
                        {
                            isMatch=false;
                            return false;
                        }
                    }
                    return true;
                }
                else //处理.aspx
                {
                    //取出尾部的每一段
                    var _endHref = /[^/]+$/.exec(aHref)[0];
                    var _endUrl = /[^/]+$/.exec(url)[0];                            
                    var arr=_endHref.split(/\?|\&/);
                    var isMatch=true;
                    for(var i=0;i<arr.length;i++)
                    {
                        var regex=new RegExp(arr[i].replace(/\.aspx/i,""),"i");
                        if(!regex.test(url))
                        {
                            isMatch=false;
                            return false;
                        }
                    }
                    return true;
                }
                //如果是其它类型则不检测
                return false;
            }            
            function getPlevel(o) {                
                if (!o)
                    return;
                var pLevelObj = null;
                function getLv(o)
                {
                    if (o.getAttribute && o.getAttribute("level"))
                        pLevelObj = o;
                    else
                        getLv(o.parentNode);
                }
                getLv(o.parentNode);
                return pLevelObj;
            }
            function isLvObj(o)
            {
                if(o&&o.getAttribute&&o.getAttribute("level"))
                    return true;
                return false;
            }            
            function findParentLevel(o,lv)
            {
                var lvObj=null;
                function findDiv(o) {
                    if (o.parentNode.id == ParentElementId||o.parentNode.nodeName.toLowerCase() == "body")
                        lvObj=null;
                    if (o.parentNode.getAttribute("level")&&parseInt(o.parentNode.getAttribute("level"))==lv) {                                                                        
                        lvObj=o.parentNode;
                    }
                    else
                        findDiv(o.parentNode);
                }
                if(lv==null||lv==-1)
                    return getPlevel(o);
                else
                {
                    findDiv(o);
                    return lvObj;
                }
            }
            function findLevel(lv0Div,lv)
            {
                var arr=lv0Div.getElementsByTagName("*");
                for(var i=0;i<arr.length;i++)
                {
                    if(arr[i].getAttribute&&arr[i].getAttribute("level"))
                    {
                        if(parseInt(arr[i].getAttribute("level"))==lv)
                            return arr[i];
                    }
                }
            }
            this.init = function () {            
               var _setIndex = -1;
               var _url = encodeURI(document.URL.toLowerCase());
              //var _url=encodeURI("http://web1018.magic2008.cn/cn/product_view_11_139.html");

               for(var i=0;i<_navArr.length;i++)
                {                    
                    _navArr[i].getLv=function(lv){
                        if(this.lv0==null)    
                            this.lv0=findParentLevel(this,0);
                        switch(lv)
                        {
                            case -1:
                                return findParentLevel(this,-1);
                            break;
                            case 0:
                                return this.lv0;
                            default:
                                return findLevel(this.lv0,lv);
                        }
                    }
                    _navArr[i].expAll=function()
                    {                        
                        function expParentNode(o)
                        {
                             if(o.nodeName.toLowerCase()=="body")
                             {
                                return;
                             }
                             else
                             {
                                o.style.display="";
                                expParentNode(o.parentNode);
                             }
                        }
                        expParentNode(this.parentNode);
                    }
                }               

                //开始查找
                var isFound = false;
                if(location.pathname!=""&&location.pathname!="/"&&location.pathname.indexOf(".")!=-1)
                {
                    for (var i = 0; i < _navArr.length; i++) { //使用url判断
                        var _a_link = encodeURI(_navArr[i].href.replace(/^http:\/\/||https:\/\//i, "").toLowerCase())
                        if (_navArr[i].href == "")
                            continue;
                        if (_url.indexOf(_a_link) != -1||_this.test(_url,_a_link)) {
                            isFound = true;
                            this.Process(_navArr[i]);
                            _setIndex = i;
                            break;
                        }
                    }
                }                
                if (!isFound) {  //如果没有匹配,则执行,默认
                    FnDefault(_navArr[0]);
                }
            };
            this.Process=function(o)
            {
                //开始从最底层查找                
                FnSelect(o);
            }
            this.init();
        };
