 /**
  * @author [cnhubei]yuyangzhi
  * @version v1.4
  * v1.2 修改两个关于页面缓存的BUG
  * v1.3 增加了一个回调功能
  * v1.4 可以过滤掉无用的子DIV元素
  * v1.5 默认活动项的urn跟rel设成了一样的
  * @Date:2007-5-10
  */
function getTBprefixName(str,sta){
    if(str.indexOf("active")!=-1 || str.indexOf("normal")!=-1) str=str.substr(6);
        else if(str.indexOf("over")!=-1) str=str.substr(4);
            else str="";
    return sta+str;
}
function getElement(_id){
  return (document.getElementById) ? document.getElementById(_id): document.all[_id];
}
function IsChild(cNode,pNode){
    while(cNode!=null){
        cNode=cNode.parentNode;
        if(cNode==pNode) return true; 
    }
    return false;
}
var divCache=new Object();
var scrollCache={};
var menuBarObj=new Object();
var MouseDelayTime=150;//鼠标感应延迟   毫秒
function startTouchMenu(){
    for(var i=0;i<arguments.length;i++){
        menuBarObj[arguments[i]]=getElement(arguments[i]);//菜单条对象
        if(menuBarObj[arguments[i]]==null) return;
        menuBarObj[arguments[i]].menusObj=new Object();
        //menuBarObj[arguments[i]].menusObj=menuBarObj[arguments[i]].childNodes;//菜单条对象下所有菜单集合(DIV组)
        menuBarObj[arguments[i]]._isAutoPlayFlag=menuBarObj[arguments[i]].getAttribute("isAutoPlay") || 'false';

        menuBarObj[arguments[i]]._delay=menuBarObj[arguments[i]].getAttribute("delay") || 5000;
        menuBarObj[arguments[i]]._length=0;//字菜单个数
        menuBarObj[arguments[i]]._currentActiveIndex=0;//当前活动的菜单编号
        menuBarObj[arguments[i]].waitInterval=null;//鼠标触摸时的计时器
        menuBarObj[arguments[i]].autoTimer=null;//自动播放的计时器
        menuBarObj[arguments[i]].prepareAutoTimer=null;//准备自动播放前的时间间隔
        //menuBarObj[arguments[i]]=menuBarObj;
        menuBarObj[arguments[i]]._name=arguments[i];//名字(ID值)
        menuBarObj[arguments[i]]._childNodes = [];
        var cDivs = menuBarObj[arguments[i]].getElementsByTagName("div");
        
        
        for(var j=0;j<cDivs.length;j++){
            
            var menuObj=cDivs[j];//单个菜单
            if(!menuObj.getAttribute("urn") || !menuObj.getAttribute("rel")){continue;}//过虑掉没有 urn 或 rel 属性的 div
            if(menuObj.parentNode.tagName!="DIV") {return;}
            menuBarObj[arguments[i]]._childNodes.push(menuObj);
            
            //if(menuObj.nodeType!=1) {continue;}//于FF兼容，过虑出节点
            menuObj.scrOri = menuObj.getAttribute("scrOri") || 'none';//内容是否滚动，可选值为[up、down、left、right]
            menuObj.urnStr=menuObj.getAttribute("urn");//自已的菜单名
            menuObj.relStr=menuObj.getAttribute("rel");//所对应的内容区域名
            menuObj.isAjax=menuObj.getAttribute("isAjax") || 'false';
            menuObj.useCache=menuObj.getAttribute("useCache") || 'true';//是否使用缓存,当isAjax为true时有效
            menuObj.callback=menuObj.getAttribute("callback") || 'null';//回调方法
            menuBarObj[arguments[i]].menusObj[menuObj.urnStr]=menuObj;//过滤掉不属于自己的子元属
            menuBarObj.relTagObj=getElement(menuObj.relStr);
            menuBarObj.relTagObj._touchMenu=menuObj;
            menuObj._selfIndex=menuBarObj[arguments[i]]._childNodes.length-1;//自己的编号,按顺序编号
            menuBarObj[arguments[i]]._length++;//计算菜单数量
            
            menuObj.setActive=function(flag){
                if(flag){
                    this.status="active";
                    this.className=getTBprefixName(this.className,"active");
                }else{
                    this.status="normal";
                    this.className=getTBprefixName(this.className,"normal");
                }
            }
            
            menuObj.LoadTab=function(){
                this.setActive(true);
                this.parentNode.activetab.setActive(false);
                this.parentNode.activetab=this;
                this.parentNode._currentActiveIndex=this._selfIndex;//将自己的编号赋给当前活动编号变量
                if(this.isAjax=="true"){
                    //sendRequest(this.urnStr,this.relStr,this.useCache);
                    sendRequest.call(this,this.urnStr,this.relStr,this.useCache);
                }else{
                    loadCacheTab(this.urnStr,this.relStr);
                }
                
            }

            
            menuObj.onmouseover=function(aEvent){
                if(this.parentNode._isAutoPlayFlag=="true"){this.parentNode.prepareStopPlay();}
                var myEvent = window.event ? window.event : aEvent;
                this.prepareLoadTab(myEvent);
            }
            menuObj.prepareLoadTab=function(_divObj){
                
                var fm=_divObj.fromElement;
                
                if(IsChild(fm,this) || fm==this) return;//过滤子元素event
                if(this.status=="active") {return;}
                if(!hasCache(this.parentNode.activetab.urn)){
                    addCache(this.parentNode.activetab.urn, this.parentNode.activetab.rel)
                }
                var isEvent= (window.event!=null )? true :((window.MouseEvent && _divObj.constructor == window.MouseEvent) ? true :false);//为了兼容IE、FF，判断对象是否由事件触发
                if(isEvent){
                    clearTimeout(this.parentNode.waitInterval);
                    this.parentNode.waitInterval=window.setTimeout("menuBarObj['"+this.parentNode._name+"'].menusObj['"+this.urnStr+"'].LoadTab();",MouseDelayTime);
                }else{
                    this.LoadTab();
                }
            }

            menuObj.onmouseout=function(aEvent){
                var myEvent = window.event ? window.event : aEvent;
                this.prepareUnloadTab(myEvent);
                if(this.parentNode._isAutoPlayFlag=="true"){this.parentNode.prepareAutoPlay();}
            }
            menuObj.prepareUnloadTab=function(_divObj){
                var em=_divObj.toElement;
                if(IsChild(em,this) || em==this) return; //过滤子元素event
                if(this.status=="active") return;
                clearTimeout(this.parentNode.waitInterval);
            }
            
            //if(menuObj.urnStr.indexOf("#default")!=-1){
                
              if(menuObj.urnStr == menuObj.relStr){
                menuObj.setActive(true);
                menuBarObj[arguments[i]].activetab=menuObj;
                //if(menuObj.useCache=='true'){
                //无论是否用页面缓存都要保存第一屏的内容
                //divCache[menuObj.urnStr]=getElement(menuObj.relStr).innerHTML;
                //}
            }else{
                menuObj.setActive(false);
            }
            
            menuBarObj.relTagObj.onmouseover=function(){
                if(this._touchMenu.parentNode._isAutoPlayFlag=="true"){this._touchMenu.parentNode.prepareStopPlay();}
                
            }
            menuBarObj.relTagObj.onmouseout=function(){
                if(this._touchMenu.parentNode._isAutoPlayFlag=="true"){this._touchMenu.parentNode.prepareAutoPlay();}
            }
            
        }
        
        menuBarObj[arguments[i]].prepareAutoPlay=function(){
            this.prepareAutoTimer=window.setTimeout("menuBarObj['"+this._name+"'].autoPlay();",MouseDelayTime);
        }
        
        menuBarObj[arguments[i]].autoPlay=function(){
            
            if(this._currentActiveIndex>=this._length){
                this._currentActiveIndex=0;
            }
            
            this._childNodes[this._currentActiveIndex].prepareLoadTab(this._childNodes[this._currentActiveIndex]);
            
            this._currentActiveIndex++;
            //setCurrentIndex(this._currentActiveIndex);测试
            clearTimeout(this.autoTimer);
            
            this.autoTimer=window.setTimeout("menuBarObj['"+this._name+"'].autoPlay();",this._delay);
        
        }
        
        menuBarObj[arguments[i]].prepareStopPlay=function(){
            clearTimeout(this.prepareAutoTimer);
            this.stopPlay();
        }
        menuBarObj[arguments[i]].stopPlay=function(){
            clearTimeout(this.autoTimer);
        }
        if(menuBarObj[arguments[i]].activetab==null){
            menuBarObj[arguments[i]].activetab=menuBarObj[arguments[i]]._childNodes[0];
        }
        
        if(menuBarObj[arguments[i]]._isAutoPlayFlag!=null && menuBarObj[arguments[i]]._isAutoPlayFlag=="true"){
            menuBarObj[arguments[i]].autoPlay();
        }
        
    }
    
}
function loadCacheTab(_urnStr,_relStr){
    //alert(_urnStr +","+ _relStr);
    var targetObj=getElement(_relStr);
    if(targetObj.scrOri && targetObj.scrOri != "none"){alert(targetObj.scrOri)
        targetObj.className = "touchMenuContent nowrap";
        if(scrollCache[_urnStr] == null){
            var srcObj=getElement(_urnStr);
            var areaWidth = targetObj.offsetWidth;
            
            do{
                targetObj.innerHTML += srcObj.innerHTML;
                //alert(targetObj.scrollWidth);
            }while(targetObj.offsetWidth < areaWidth)
        }
    }else{
        targetObj.className = "touchMenuContent";
        if(divCache[_urnStr]==null){
            var srcObj=getElement(_urnStr);
            targetObj.innerHTML=srcObj.innerHTML;
            divCache[_urnStr]=srcObj.innerHTML;
        }else{
            targetObj.innerHTML=divCache[_urnStr];
        }
    }
}
function hasCache(_urnStr){
    if(divCache[_urnStr]==null){
        return false;
    }else{
        return true;
    }
}
function addCache(_urnStr,_relStr){
    var targetObj=getElement(_relStr);
    var srcObj=getElement(_urnStr);
    divCache[_urnStr]=srcObj.innerHTML;
}

function getXMLHttpRequest() {
    var http_request;
    if(window.XMLHttpRequest) { 
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType("text/xml");
        }
    }
    else if (window.ActiveXObject) { 
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    
    if (!http_request) { 
        window.alert("can't create XMLHttpRequest object.");
        return null;
    }    
    return http_request;
}

function sendRequest(url,_relStr,_useCache) {
    
    var targetObj=getElement(_relStr);
    var callback=this.callback;
    if(_useCache == "false" || divCache[url]==null){
        var XMLHttpObj = new getXMLHttpRequest();
        if (XMLHttpObj) {
            XMLHttpObj.onreadystatechange =function(){
                var data = null;
                if (XMLHttpObj.readyState == 4) {
                    if (XMLHttpObj.status == 200) {
                        targetObj.innerHTML = XMLHttpObj.responseText;
                        
                        if(callback){
                            eval(callback);
                        }
                        if(_useCache != "false"){divCache[url]=targetObj.innerHTML;}
                    }
                }
            }
            
            
            XMLHttpObj.open("GET", url+ "?v="+(new Date()).getMilliseconds() , true);
            XMLHttpObj.setRequestHeader("content-type","text/html; charset=gb2312");

            XMLHttpObj.send(null);
        }
    }else{
        targetObj.innerHTML=divCache[url];
    }
    
    
}



///////////////////测试////////////////////////////////
function setCurrentIndex(index){
    var currentIndexTag=getElement("currentIndex");
    currentIndexTag.innerText=index;
}
