﻿// JavaScript Document
// 千家网 千家指数 4.3 调用
// Alex (Slamz) 2008.9

var exUrl = 'http://ex.qianjia.com/report/json/';
var itemsPerPage = 8; //每页条数
var maxItems = 100;
var codes = ['all'];

var arMaxItems = {'cabling':30};

var target;
var exDL = new DynamicLoad();
var exLoaded = [];
var exControl = new clsExSystemControl('exControl');
var exPageGuides = {};
var lastKey = 'undefined';
var allLoaded = false;
var loadTimer = null;
var failTimes = 0;
var browser = GetBrowserInfo();
var showall = false;
var cssLoaded = false;

exDL.LoadedCallback = function(src) {
    switch (src) {
        case exUrl + 'report.js':
            break;
        case exUrl + 'ex.css':
        case exUrl + 'exMax.css':
        case exUrl + 'exMini.css':
            cssLoaded = true;
            break;
        default:
            if (src.indexOf(lastKey) >= 0) {
                __show();
            }
    }
};
exDL.Load(exUrl + 'report2009.js');







//-----------行业系统切换控制---------------
function clsExSystemControl(instanceName) {
    this.interval = 4000; //自动切换间隔
    this.CurrnetFrame = null;
    this.CurrentButton = null;
    this.CurrentCode = null;
    this.timer = null;

    this.fadeOut = null;
    this.fadeIn = null;

    this.SetFrame = function(code) {
        var frame = document.getElementById('frame_' + code);
        if (frame == null) return;
        if (this.CurrentButton != null) {
            if (this.CurrentFrame.id == 'frame_' + code) return;
            this.CurrentButton.className = 'normal';
        }

        this.autoScroll(!showall);

        if (this.CurrentFrame != null) this.fadeOut = new clsFade(instanceName + '.fadeOut', this.CurrentFrame, 0, 0, 60);
        this.fadeIn = new clsFade(instanceName + '.fadeIn', frame, 0, 100, 60);
        if (this.fadeOut != null) this.fadeOut.Start();
        this.fadeIn.Start();



        this.CurrentFrame = frame;
        this.CurrentFrame.style.display = 'block';
        this.CurrentButton = document.getElementById('exLi_' + code);
        this.CurrentButton.className = 'active';
        this.CurrentCode = code;

        if (exLoaded.length == 1) exPageGuides[code].AutoScrolling = true;
        exPageGuides[code].SetPage(1);
    };
    this.nextFrame = function() {
        for (var i = 0; i < exLoaded.length; i++) {
            if (exLoaded[i] == this.CurrentCode) {
                if ((i + 1) < exLoaded.length) {
                    this.SetFrame(exLoaded[i + 1]);
                } else {
                    this.SetFrame(exLoaded[0]);
                }
                return;
            }
        }
        this.SetFrame(exLoaded[0]);
    };
    this.previousFrame = function() {
        for (var i = 0; i < exLoaded.length; i++) {
            if (exLoaded[i] == this.CurrentCode) {
                if ((i - 1) < exLoaded.length && (i - 1) >= 0) {
                    this.SetFrame(exLoaded[i - 1]);
                } else {
                    this.SetFrame(lastKey);
                }
                return;
            }
        }
        this.SetFrame(lastKey);
    };
    this.autoScroll = function(bool) {
        if (bool) {
            if (this.timer != null) clearInterval(this.timer);
            this.timer = setInterval(instanceName + ".nextFrame()", this.interval);
        } else {
            if (this.timer != null) clearInterval(this.timer);
        }
    };
    this.Reset = function() {
        if (this.timer != null) clearInterval(this.timer);
        this.CurrnetFrame = null;
        this.CurrentButton = null;
        this.CurrentCode = null;
        this.timer = null;

        this.fadeOut = null;
        this.fadeIn = null;
        
    };
}



//-----------分页控制---------------
function clsExPageControl(instanceName, code, pages, autoScrolling) {
    this.interval = 8000; //自动切换间隔
    this.CurrnetPage = null;
    this.CurrentButton = null;
    this.CurrentPageNum = null;
    this.timer = null;
    this.AutoScrolling = autoScrolling;

    this.Pages = pages;

    this.fadeOut = null;
    this.fadeIn = null;

    this.SetPage = function(page) {
        var tPage = document.getElementById('tb_' + code + '_' + page);
        if (tPage == null) return;
        if (this.CurrentButton != null) {
            if (this.CurrentPage.id == 'tb_' + code + '_' + page) return;
            this.CurrentButton.className = 'normal';
        }

        if (this.CurrentPage != null) this.fadeOut = new clsFade(instanceName + '.fadeOut', this.CurrentPage, 0, 0, 60);
        this.fadeIn = new clsFade(instanceName + '.fadeIn', tPage, 0, 100, 60);

        this.fadeIn.Start();
        if (this.fadeOut != null) this.fadeOut.Start();


        this.CurrentPage = tPage;
        this.CurrentPage.style.display = 'block';
        this.CurrentButton = document.getElementById('ep_' + code + '_' + page);
        this.CurrentButton.className = 'active';
        this.CurrentPageNum = page;
        this.autoScroll(this.AutoScrolling);
    };
    this.nextPage = function() {
        if (this.CurrentPageNum + 1 > this.Pages)
            this.SetPage(1);
        else
            this.SetPage(this.CurrentPageNum + 1);

    };
    this.previousPage = function() {
        if (this.CurrentPageNum - 1 <= 0)
            this.SetPage(this.Pages);
        else
            this.SetPage(this.CurrentPageNum - 1);
    };
    this.autoScroll = function(bool) {
        if (bool) {
            if (this.timer != null) clearInterval(this.timer);
            this.timer = setInterval(instanceName + ".nextPage()", this.interval);
        } else {
            if (this.timer != null) clearInterval(this.timer);
        }
    };
    this.reset = function() {
        if (this.timer != null) clearInterval(this.timer);
        this.CurrnetPage = null;
        this.CurrentButton = null;
        this.CurrentPageNum = null;
        this.timer = null;
        this.AutoScrolling = autoScrolling;

        this.Pages = pages;

        this.fadeOut = null;
        this.fadeIn = null;
    };
}



function clsFade(instanceName, targetObject, startAlpha, stopAlpha, speed) {
    //var target = document.getElementById(id);
    this.target = targetObject;
    this.interval = speed;
    this.timer = null;
    this.current = startAlpha;
    this.s1 = startAlpha;
    this.s2 = stopAlpha;
    this.type = (startAlpha < stopAlpha ? 'inc' : (startAlpha > stopAlpha ? 'dec' : ''));


    this.Start = function() {
        if ((this.type == 'inc' && this.current >= this.s2) || (this.type == 'dec' && this.current <= this.s2)) {
            if (this.timer != null) clearInterval(this.timer);
            return;
        }
        if (this.type == '') {
            this.SetAlpha(this.current);
            return;
        }
        if (this.timer == null) this.timer = setInterval(instanceName + ".__fade()", this.interval);
    };
    this.__fade = function() {

        if ((this.type == 'inc' && this.current >= this.s2) || (this.type == 'dec' && this.current <= this.s2)) {
            if (this.timer != null) clearInterval(this.timer);
            return;
        }
        switch (this.type) {
            case 'inc':
                this.current += 10; break;
            case 'dec':
                this.current -= 10; break;
        }
        this.SetAlpha(this.current);
    };
    //0~100
    this.SetAlpha = function(value) {
        if (this.target == null) return;
        if (browser.browser == 'ie') {
            if (value >= 95)
                this.target.style.filter = "";
            else if (value <= 5 && this.type != 'inc')
                this.target.style.display = "none";
            else
                this.target.style.filter = "Alpha(Opacity=" + value + ")";

        } else if (browser.browser == 'firefox') {
            if (value >= 99)
                this.target.style.opacity = 100;
            else if (value <= 5 && this.type != 'inc')
                this.target.style.display = "none";
            else
                this.target.style.opacity = value / 100;
        } else {
            if (value <= 5 && this.type != 'inc')
                this.target.style.display = "none";
        }
    };

    this.SetAlpha(this.s1);
    this.target.style.display = "block";
}




function LoadSystemExdata() {
    if (!CheckReportLoaded()) {
        if (failTimes > 20) {
            return;
        }
        setTimeout("LoadSystemExdata()", 20);
        return;
    }
    if (codes == null || codes.length == 0) return;

    if (exReport == null) {
        alert('无法加载千家指数报表数据');
        return;
    }
    var tempKey;

    if (codes[0] == 'all' || codes[0] == '') {
        for (var key in exReport) {
            var er = exReport[key];
            LoadExData(er.code, er.year, er.month);
            tempKey = key;
        }
        lastKey = tempKey;
    } else {
        for (var i = 0; i < codes.length; i++) {
            var er = exReport[codes[i]];
            if (er == null) continue;
            LoadExData(er.code, er.year, er.month);
            tempKey = codes[i];
        }
        lastKey = tempKey;
    }

}



function LoadExData(code, year, month) {
    var jsName;
    if (showall)
        jsName = code + '_' + year + '_' + month + '.js';
    else
        jsName = code + '_' + year + '_' + month + '_a.js';
    exDL.Load(exUrl + jsName);
    exLoaded.push(code);
}

function BuildAll() {
    var divMain = document.createElement('div'); //最外层
    var divShowPic = document.createElement('div'); //图表层
    var divRight = document.createElement('div'); //右边	
    var divMenu = BuildMenu();
    //var divBottom = document.createElement('div'); //下边

    divMain.id = 'exMain';
    divRight.id = 'exRight';
    divRight.appendChild(BuildDetails());
    divShowPic.id = 'exShowPic';
    //divBottom.id='exBottom';
    divMain.appendChild(divMenu);
    divMain.appendChild(divRight);
    divMain.appendChild(divShowPic);
    //divMain.appendChild(divBottom);
    if (exLoaded.length < 2) {
        divMenu.style.display = 'none';
        divRight.style.width = '100%';
    }
    return divMain;
}

function CheckReportLoaded() {
    if (typeof (exReport) == 'undefined') {
        failTimes += 1;
        return false;
    } else {
        failTimes = 0;
        return true;
    }
}


function CheckAllLoaded() {
    for (var i = 0; i < exLoaded.length; i++) {
        var loaded;
        eval('loaded=typeof(exData_' + exLoaded[i] + ')=="object";');
        if (!loaded) {
            failTimes += 1;
            return false;
        }
    }
    failTimes = 0;
    return true;
}

function BuildMenu() {
    var divMenu = document.createElement('div'); //菜单层
    divMenu.id = 'exMenu';
    var ul = document.createElement('ul'); //系统层
    for (var i = 0; i < exLoaded.length; i++) {
        var code = exLoaded[i];
        var exData;
        eval('exData=exData_' + code);

        var li = document.createElement('<li onclick="exControl.SetFrame(\'' + code + '\')" onmouseover="style.cursor=\'pointer\'"></li>');
        with (li) {
            id = 'exLi_' + code;
            innerHTML = exData.trade;
            className = 'normal';
            if (exLoaded.length < 5) {
                if (typeof (style.cssFloat) == 'undefined')
                    style.styleFloat = 'left';
                else
                    style.cssFloat = 'left';
            }
        }
        ul.appendChild(li);
    }
    divMenu.appendChild(ul);
    return divMenu;
}

function BuildDetails() {
    var divDetails = document.createElement('div'); //细节层
    divDetails.id = 'exDetails';

    for (var i = 0; i < exLoaded.length; i++) {
        var divFrame = document.createElement('div'); //系统层
        var code = exLoaded[i];
        var exData;
        eval('exData=exData_' + code);

        with (divFrame) {
            id = 'frame_' + code;
            className = 'frame';
            appendChild(BuildTable(code, exData));
        }
        divDetails.appendChild(divFrame);
    }
    return divDetails;
}

function BuildTable(code, exData) {
    var div = document.createElement('div');


    div.appendChild(BuildTitle(exData.trade + '<label id="lbmonth">' + exData.month + '</label> 月', code));

    var divPageGuide = document.createElement('div');
    divPageGuide.id = "exPageGuide";

    var ul = document.createElement('ul');

    var pages, totalItems, chk;

    
    eval('chk = typeof(arMaxItems.' + code + ')');
    if(chk=='undefined'){
    	if (exData.exData.length > maxItems)
            totalItems = maxItems;
        else
	    totalItems = exData.exData.length;
    }else{
	eval('totalItems = (arMaxItems.'+code+' < exData.exData.length)?arMaxItems.' + code + ':exData.exData.length');
    }


    pages = (Math.floor((totalItems - 1) / itemsPerPage) + 1);

    for (var i = 0; i < pages; i++) {
        var table = document.createElement('table');
        with (table) {
            id = 'tb_' + code + '_' + (i + 1);
            border = 0;
            cellSpacing = 1;
            cellPadding = 0;
            appendChild(document.createElement('tBody'));
            firstChild.appendChild(document.createElement('tr'));
            with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                innerHTML = '排名';
            }
            with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                innerHTML = '品牌';
            }
            if (showall) {
                with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                    innerHTML = '品牌识别';
                }
                with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                    innerHTML = '品牌实力';
                }
                with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                    innerHTML = '活跃力';
                }
                with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                    innerHTML = '口碑';
                }
            }
            with (firstChild.firstChild.appendChild(document.createElement('th'))) {
                innerHTML = '总分';
            }
            //firstChild.firstChild.childNodes[0].innerHTML = '品牌';
            //firstChild.firstChild.childNodes[1].innerHTML = '指数';
            //firstChild.firstChild.childNodes[2].innerHTML = '排名';

            for (var j = 0; j < itemsPerPage; j++) {
                var tr = document.createElement('<tr onmouseover="s(this)" onmouseout="h(this)"></tr>');
                with (tr) {
                    className = 'common';
                    var index = i * itemsPerPage + j;
                    var td1 = document.createElement('td');
                    var td2 = document.createElement('td');
                    var td3 = document.createElement('td');

                    var td4, td5, td6, td7;
                    if (showall) {
                        var td4 = document.createElement('td');
                        var td5 = document.createElement('td');
                        var td6 = document.createElement('td');
                        var td7 = document.createElement('td');
                    }

                    if (index < totalItems) {
                        var data = exData.exData[index];
                        id = 'tr_' + data.id;
                        td1.innerHTML = index + 1;
                        td2.innerHTML = '<div class="i">' + data.nameab + '</div>';
                        td3.innerHTML = data.total;
                        td1.className = 'rk';
                        td2.className = 'm';
                        td3.className = 't';

                        if (showall) {
                            td4.innerHTML = data.opt_01;
                            td5.innerHTML = data.opt_02;
                            td6.innerHTML = data.opt_03;
                            td7.innerHTML = data.opt_04;
                            td4.className = 'p';
                            td5.className = 'p';
                            td6.className = 'p';
                            td7.className = 'p';
                        }

                    } else {
                        td1.innerHTML = '&nbsp;';
                    }
                    appendChild(td1);
                    appendChild(td2);
                    if (showall) {
                        appendChild(td4);
                        appendChild(td5);
                        appendChild(td6);
                        appendChild(td7);
                    }
                    appendChild(td3);
                }
                firstChild.appendChild(tr);
            }
        } // with table
        div.appendChild(table);

        //加入分页按钮
        var li = document.createElement('<li onmouseover="b(this)" onclick="p(\'' + code + '\',' + (i + 1) + ')"></li>');
        li.id = 'ep_' + code + '_' + (i + 1);
        li.className = "normal";
        li.innerHTML = i + 1;
        ul.appendChild(li);
    }
    if (exPageGuides[code] != null) 
        exPageGuides[code].reset();
    else
        exPageGuides[code] = new clsExPageControl("exPageGuides['" + code + "']", code, pages, false);
    divPageGuide.appendChild(ul);
    div.appendChild(divPageGuide);
    return div;
}

function BuildTitle(text, code) {
    var divTitle = document.createElement('div'); //标题

    var divT1 = document.createElement('div'); //标题
    var divT2 = document.createElement('div'); //标题

    divT1.innerHTML = text;
    divT2.appendChild(BuildTitleLink(code));

    divT1.className = 'T1';
    divT2.className = 'T2';

    with (divTitle) {
        className = 'exDetailsTitle';
        appendChild(divT1);
        appendChild(divT2);
    }
    return divTitle;
}


function BuildTitleLink(code) {
    var tLink = document.createElement('a');
    tLink.target = '_blank';
    tLink.className = 'url';
    var url;
    switch (code) {
        case 'cabling':
            url = 'cabling-system.com';
            break;
        case 'smarthome':
            url = 'smarthomecn.com';
            break;
        case 'il':
            url = '1000lighting.com';
            break;
        case 'el':
            url = '1000lighting.com';
            break;
        case 'ba':
            url = '1000bas.com';
            break;
        case 'si':
            url = '1000si.com';
            break;
        case 'ibms':
            url = '1000ibms.com';
            break;
        case 'ac':
        case 'ai':
        case 'cctv':
        case 'sas':
        case 'bio':
        case 'pms':
            url = '1000security.com';
            break;
        default:
            url = 'QIANJIA.com';
    }
    tLink.href = 'http://' + url;
    tLink.innerHTML = url;
    return tLink;
}

function p(code, page) {
    exPageGuides[code].SetPage(page);
}

function b(sender) {
    sender.style.cursor = 'pointer';
    exControl.autoScroll(false);
}

function s(sender) {
    if (sender == null || sender.id == '') return;
    var mid = sender.id.substr(3, sender.id.length - 3);
    with (document.getElementById('exShowPic')) {
        var month = 1;
        var year = 2009;
        if (exLoaded.length == 1) {
            eval('month = exData_' + exControl.CurrentCode + '.month');
            eval('year = exData_' + exControl.CurrentCode + '.year');
        }
        else {
            month = exReport[exControl.CurrentCode].month;
            year = exReport[exControl.CurrentCode].year;
        }


        innerHTML = '';
        if (showall) {
            innerHTML = '<iframe width="310" scrolling="no" frameborder="0" height="220" src="http://ex.qianjia.com/report/charts/vigor/' +
				exControl.CurrentCode + '/' + mid + '-vigor-current-6.png"></iframe><br/><div class="line"></div>';
        }
        innerHTML += '<iframe width="310" scrolling="no" frameborder="0" height="220" src="http://ex.qianjia.com/report/charts/rank/' +
				exControl.CurrentCode + '/' + mid + '-rank-current-6.png"></iframe><br/><div class="line"></div>';
        innerHTML += '<iframe width="310" scrolling="no" frameborder="0" height="220" src="http://ex.qianjia.com/report/charts/Details_AVG/' +
				exControl.CurrentCode + '/' + mid + '-DetailsAVG-'+ year + '-' + month + '.png"></iframe><br/><div class="line"></div>';


        var exMain = document.getElementById('exMain');

        if (!showall) {
            var exLeft = findPosXY(exMain).x;

            if (exLeft > 600) {
                var e = sender.event || window.event;
                style.left = (e.screenX - e.offsetX - 320) + 'px';
            }
            else
                style.left = exLeft + parentNode.offsetWidth + 'px';

            style.display = 'block';
        }
    }

    exControl.autoScroll(false);
    exPageGuides[exControl.CurrentCode].autoScroll(false);
    sender.className = 'selected';
    sender.style.cursor = 'pointer';
}

function h(sender) {
    sender.className = 'common';
    if (showall) return;
    document.getElementById('exShowPic').style.display = 'none';
    exControl.autoScroll(!showall);
    exPageGuides[exControl.CurrentCode].autoScroll(!showall);
}

function __show() {
    allLoaded = CheckAllLoaded();
    
    if (!allLoaded) {
        if (failTimes > 20) {
            with (document.getElementById(target)) {
                innerHTML = '数据不存在或无法加载无法加载指数数据';
            }
            return;
        }
        loadTimer = setTimeout("__show()", 200);
        return;
    }
    var exMain = BuildAll(showall);
    with (document.getElementById(target)) {
        if (offsetWidth < 200)
            exDL.ChangeCss('ex.css', 'exMini.css');
        if(childNodes.length>0) removeChild(childNodes[0]);
        appendChild(exMain);
    }

    //if(!showall)
    if (exLoaded.length < 5) {
        with (document.getElementById('exMenu')) {
            style.width = '90%';
        }

        with (document.getElementById('exRight')) {
            if (browser.browser == 'ie') {
                if (browser.version >= 7)
                    if (showall)
                        style.width = (parentNode.offsetWidth - 400) + 'px';
                    else
                        style.width = (parentNode.offsetWidth - 10) + 'px';
                else {
                    if (showall)
                        style.width = (parentNode.offsetWidth - 400) + 'px';
                    else
                        style.width = (parentNode.offsetWidth - 20) + 'px';
                }
            }
        }
    } else {
        var menuWidth = document.getElementById('exMenu').offsetWidth;
        with (document.getElementById('exRight')) {
            if (browser.browser == 'ie') {
                if (browser.version >= 7)
                    style.width = (parentNode.offsetWidth - 10 - menuWidth) + 'px';
                else {
                    style.width = (parentNode.offsetWidth - menuWidth - 14) + 'px';
                    style.position = 'relative';
                    style.left = '-5px';
                }
            }
        }
    }



    exControl.nextFrame();
    exControl.autoScroll(!showall);
}


function exShow(targetId) {
    showall = false;
    if (!cssLoaded) exDL.Load(exUrl + 'ex.css');
    var vars = arguments;
    if (vars.length > 1) {
        itemsPerPage = Number(vars[1]);
        codes = [];
        for (var i = 2; i < vars.length; i++)
            codes.push(vars[i]);
        if (codes.length == 0) codes.push('all');
    }
    target = targetId;
    LoadSystemExdata();
}

function exShowAll(targetId) {
    showall = true;
    if (!cssLoaded) exDL.Load(exUrl + 'exMax.css');
    var vars = arguments;
    if (vars.length > 1) {
        itemsPerPage = Number(vars[1]);
        codes = [];
        for (var i = 2; i < vars.length; i++)
            codes.push(vars[i]);
        if (codes.length == 0) codes.push('all');
    }
    target = targetId;
    LoadSystemExdata();
}

function exShowAllByDate(targetId, code, year, month) {
    var loaded = typeof (exReport) == "object";
    if (loaded) {
        var r = exReport[code];
        if(r!=null)
            if (Number(year) + Number(month) > Number(r.year) + Number(r.month)) {
                alert('不存在指定月份的数据');
                return;
            }

    }

    exLoaded = [];
    exControl.Reset(); //设置成null才可以再次显示新frame
    showall = true;
    if (!cssLoaded) exDL.Load(exUrl + 'exMax.css');
    itemsPerPage = 15;
    target = targetId;
    lastKey = code;
    LoadExData(code, year, month);
    
}











//------------动态加载---------------------------------------------------------------
function DynamicLoad() {
    //属性
    var Self = this; 					//对象自身

    //功能：加载指定的文件
    //参数：src——需要被加载的文件
    //返回：（无）
    this.Load = function(src) {
        if (Self.IsLoaded(src))				//判断该文件是否已经加载了
        {
            Self.OnLoaded(src);
            return;
        }
        else							//如果没有加载，动态创建
        {
            var objDynamic; 			//动态创建的对象
            var type = Self.GetSrcType(src); //文件类型
            if (type == "js" || type == "vbs") {
                objDynamic = document.createElement("script");
                objDynamic.src = src;
                if (type == "js") {
                    objDynamic.type = "text/javascript";
                    objDynamic.language = "javascript";
                }
                else {
                    objDynamic.type = "text/vbscript";
                    objDynamic.language = "vbscript";
                }
            }
            else if (type == "css") {
                objDynamic = document.createElement("link");
                objDynamic.rel = "stylesheet";
                objDynamic.type = "text/css";
                objDynamic.href = src;
            }
            else {
                Self.OnFailed(src);
                return;
            }
            var head = document.getElementsByTagName("head")[0];
            head.appendChild(objDynamic); //将创建的对象插入到HEAD节中

            objDynamic.onload = objDynamic.onreadystatechange = function()			//加载过程中状态改变引发的事件
            {
                //在此函数中this指针指的是s结点对象，而不是JsLoader实例，   
                //所以必须用self来调用onsuccess事件，下同。
                if (this.readyState && this.readyState == "loading")
                    return;
                else
                    Self.OnLoaded(src);
            };
            objDynamic.onerror = function()												//加载过程中发生错误引发的事件
            {
                document.getElementsByTagName("head")[0].removeChild(objDynamic);
                Self.OnFailed(src);
            };
        }
    };

    //功能：判断是否已经加载了某文件
    //参数：src——需要被检查的文件
    //返回：返回是否已经加载了该文件
    this.IsLoaded = function(src) {
        var isLoaded = false; 		//假设没有加载
        var type = Self.GetSrcType(src); //得到文件的类型
        var i; 					//用于循环的索引
        if (type == "js" || type == "vbs") {
            var scripts = document.getElementsByTagName("script"); //得到所有的脚本对象集合
            for (i = 0; i < scripts.length; i++)							//依次判断每个script对象
            {
                if (scripts[i].src && scripts[i].src.indexOf(src) != -1) {
                    if (scripts[i].readyState == "loaded" || scripts[i].readyState == "complete") {
                        isLoaded = true;
                        break;
                    }
                }
            }
        }
        else if (type == "css") {
            var links = document.getElementsByTagName("link"); 	//得到所有的link对象集合
            for (i = 0; i < links.length; i++)								//依次判断每个link对象
            {
                if (links[i].href && links[i].href.indexOf(src) != -1) {
                    if (links[i].readyState == "loaded" || links[i].readyState == "complete" || links[i].readyState == "interactive") {
                        isLoaded = true;
                        break;
                    }
                }
            }
        }
        return isLoaded;
    };


    this.ChangeCss = function(oldCss, newCss) {
        var links = document.getElementsByTagName("link"); 	//得到所有的link对象集合
        for (i = 0; i < links.length; i++)								//依次判断每个link对象
        {
            if (links[i].href && links[i].href.indexOf(oldCss) != -1) {
                links[i].href = links[i].href.replace(oldCss, newCss);
            }
        }
    };

    //功能：得到文件的类型（即扩展名）
    //参数：src——文件名
    //返回：返回文件的类型
    this.GetSrcType = function(src) {
        var type = "";
        var lastIndex = src.lastIndexOf(".");
        if (lastIndex != -1) {
            type = src.substr(lastIndex + 1);
        }
        return type;
    };

    //功能：当文件加载完成时发生的事件
    //参数：src——加载完成的文件
    //返回：（无）
    this.OnLoaded = function(src) {
        Self.LoadedCallback(src);
    };

    //功能：文件加载完成时执行的回调函数
    //参数：src——加载完的文件
    //返回：（无）
    this.LoadedCallback = function(src) { };

    //功能：当文件加载过程中发生错误时发生的事件
    //参数：src——正在加载的文件
    //返回：（无）
    this.OnFailed = function(src) {
        Self.FailedCallback(src);
    };

    //功能：当文件加载失败时执行的回调函数
    //参数：src——加载失败的文件
    //返回：（无）
    this.FailedCallback = function(src) { };
}

function findPosXY(obj) {
    var cur = new Object();
    cur['x'] = 0;
    cur['y'] = 0;

    if (obj.offsetParent) {
        while (obj.offsetParent) {//遍历所有父类元素
            cur.x += obj.offsetLeft; //当前元素的左边距
            cur.y += obj.offsetTop;
            obj = obj.offsetParent;
        }
    } else if (obj.x) cur.x += obj.x;

    return cur;
}


function GetBrowserInfo() {
    var Sys = {};
    var ua = navigator.userAgent.toLowerCase();
    if (window.ActiveXObject) {
        Sys.browser = "ie";
        Sys.version = ua.match(/msie ([\d.]+)/)[1];
    }
    else if (document.getBoxObjectFor) {
        Sys.browser = "firefox";
        Sys.version = ua.match(/firefox\/([\d.]+)/)[1];
    }
    else if (window.MessageEvent && !document.getBoxObjectFor) {
        Sys.browser = "chrome";
        Sys.version = ua.match(/chrome\/([\d.]+)/)[1];
    }
    else if (window.opera) {
        Sys.browser = "opera";
        Sys.version = ua.match(/opera.([\d.]+)/)[1];
    }
    else if (window.openDatabase) {
        Sys.browser = "safari";
        Sys.version = ua.match(/version\/([\d.]+)/)[1];
    }
    return Sys;
}