﻿//定义通用类创建对象
var Class = {
    create: function() {
        return function() {
            return this.initialize.apply(this, arguments); //强制类声明时初始化
        }
    }
};
//对象原型扩展
Object.extend = function(destination, source) {
    for (property in source) {
        destination[property] = source[property];
    }
    return destination;
};
Function.prototype.bind = function() {
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
        return __method.apply(object, args.concat($A(arguments)));
    }
};
Function.prototype.bindAsEventListener = function(object) {
    var __method = this, args = $A(arguments), object = args.shift();
    return function(event) {
        return __method.apply(object, [(event || window.event)].concat(args).concat($A(arguments)));
    }
};
var $A = Array.from = function(iterable) {
    if (!iterable) return [];
    if (iterable.toArray) {
        return iterable.toArray();
    } else {
        var results = [];
        for (var i = 0, length = iterable.length; i < length; i++) {
            results.push(iterable[i]);
        }
        return results;
    }
};
var lBrowser = {};
lBrowser.agt = navigator.userAgent.toLowerCase();
lBrowser.isW3C = document.getElementById ? true : false;
lBrowser.isIE = ((lBrowser.agt.indexOf("msie") != -1) && (lBrowser.agt.indexOf("opera") == -1) && (lBrowser.agt.indexOf("omniweb") == -1));
lBrowser.isNS6 = lBrowser.isW3C && (navigator.appName == "Netscape");
lBrowser.isOpera = lBrowser.agt.indexOf("opera") != -1;
lBrowser.isGecko = lBrowser.agt.indexOf("gecko") != -1;
lBrowser.ieTrueBody = function() {
    return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
};
//为Firefox下的DOM对象增加innerText属性 
if (lBrowser.isNS6) { //firefox innerText define 
    HTMLElement.prototype.__defineGetter__("innerText",
  function() {
      return this.textContent;
  }
  );
    HTMLElement.prototype.__defineSetter__("innerText",
  function(sText) {
      this.textContent = sText;
  }
  );
}
function getRootPath() {
    var strFullPath = window.document.location.href;
    var strPath = window.document.location.pathname;
    var pos = strFullPath.indexOf(strPath);
    var prePath = strFullPath.substring(0, pos);
    var postPath = strPath.substring(0, strPath.substr(1).indexOf('/') + 1);
    return (prePath + postPath);
}
function getPos(elm) {
    var left = 0, top = 0;
    var parent = elm;
    while (parent) {
        left += parent.offsetLeft;
        top += parent.offsetTop;
        parent = parent.offsetParent;
    }
    return { x: left, y: top };
}
if (!Event) {
    var Event = {};
}
//Event.attach(map, "touchstart", this.start, this, false);
Event.attach = function(o, t, f, fc, c) {
    if (typeof (o) == 'string')
        o = document.getElementById(o);
    if (!c) {
        c = false;
    }

    var a = (arguments.length > 5 ? $A(arguments).slice(5, arguments.length) : new Array());
    var fn = function(e) {
        a.unshift(e || window.event);
        return f.apply((fc ? fc : o), a);
    }
    var domms = "DOMMouseScroll";
    if (o.addEventListener) {
        if (navigator.appName.indexOf("Netscape") == -1) {
            if (t == domms) {
                t = "mousewheel";
            }
        }
        if (navigator.userAgent.indexOf("Safari") != -1) {
            if (t == domms) {
                o.onmousewheel = fn;
            } else {
                o.addEventListener(t, fn, c);
            }
        } else {
            o.addEventListener(t, fn, c);
        }
    }
    else {
        if (t == domms) {
            o.attachEvent("onmousewheel", fn);
        }
        else {
            o.attachEvent("on" + t, fn);
        }
    }
};
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
};
function getElementsByClassName(className, parentElement, tagName) {
    if (!tagName)
        tagName = "*";
    var elems = null;
    if (typeof (parentElement) == 'object') {
        elems = parentElement.getElementsByTagName(tagName);
    } else {
        elems = (document.getElementById(parentElement) || document.body).getElementsByTagName(tagName);
    }
    var result = [];
    for (i = 0; j = elems[i]; i++) {
        if ((" " + j.className + " ").indexOf(" " + className + " ") != -1) {
            result.push(j);
        }
    }
    return result;
}
function getObj(id) {
    return document.getElementById(id);
}
function gotoPre() {
    var agt = navigator.userAgent.toLowerCase();
    var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    var needReload = (is_ie ? history.length == 0 : history.length == 1);
    if (needReload) { self.location.reload(); } else { history.back(); }
    return false;
}
function cancelEvent(elm) {
    var args = arguments;
    if (args.length < 2) return;
    if (typeof (elm) == 'string') elm = document.getElementById(elm);
    for (var i = 1; i < args.length; i++) {
        elm['on' + args[i]] = function(evt) { evt = evt || window.event; evt.cancelBubble = true; return false; };
    }
}
function bindEvent(elm, evtName, evtFun, useCapture) {
    //debugger;
    if (!useCapture)
        useCapture = false;
    if (typeof (elm) == 'string') elm = document.getElementById(elm);
    if (elm.addEventListener) elm.addEventListener(evtName, evtFun, useCapture);
    else if (elm.attachEvent) elm.attachEvent('on' + evtName, evtFun);
}
/*
evt = window.event ? window.event : evt;
var srcEle = evt.srcElement ? evt.srcElement : evt.target;
var o = srcEle.parentNode;
var oid = o.getAttribute("id");
*/
var Utils = {};
Utils.Common = {
    delay: function(time, obj, depth) {
        var caller = arguments.callee.caller;
        if (typeof (depth) == 'number') {
            while (depth > 0) {
                caller = caller.arguments.callee.caller;
                depth--;
            }
        }
        var args = caller.arguments;
        return setTimeout(function() { caller.apply(obj, args) }, time);
    },
    random: function(count) {
        var max = Utils.Common.sameNum(9, count);
        var min = Utils.Common.sameNum(1, count);
        return Math.round(Math.random() * (max - min) + min);
    },
    sameNum: function(baseNum, count) {
        var r = Math.pow(10, count);
        r = (r - 1) / 9 * baseNum;
        return r;
    },
    mixed: function(n) {
        //js生成随机数,n表示生成几位的随机数
        var jschars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
        var res = "";
        for (var i = 0; i < n; i++) {
            var id = Math.ceil(Math.random() * 35);
            res += jschars[id];
        }
        return res;
    },
    //生成唯一id
    getExecutionId: function(prefix) {
        prefix = prefix ? prefix : "id_";
        var a = new Date, b = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate(), a.getHours(), a.getMinutes(), a.getSeconds(), a.getMilliseconds());
        b += Math.round(Math.random() * 10000);
        return prefix + b;
    },
    getTextLength: function(text, fontSize) {
        text = text.trim();
        var c = text.length;
        var w = text.match(/[^ -~]/g) == null ? 0 : text.match(/[^ -~]/g).length;
        var s = c - w;
        var len = 2 * w + s;
        if (fontSize) {
            len = parseInt((w + s * 2 / 3) * fontSize);
        }
        return len;
    },
    getSubStr: function(text, width, fontSize, option) {
        var cc = parseInt(width / fontSize);
        var c = text.length;
        var r = c < cc ? text : text.substr(0, cc - 1) + '...';
        if (option) {
            return r;
        }
        document.write(r);
    },
    xmlJson: function(row) {
        var Params = {};
        if (!row) { return Params; }
        for (var n = 0; n < row.childNodes.length; n++) {
            var item = row.childNodes[n];
            Params[item.nodeName.toLowerCase()] = item.text;
        }
        return Params;
    }
};
Utils.Request = {
    query: function(strName, href) {
        var r = "";
        var strHref = href ? href : window.document.location.href;
        var intPos = strHref.indexOf("?");
        var strRight = strHref.substr(intPos + 1);
        var arrTmp = strRight.split("&");
        for (var i = 0; i < arrTmp.length; i++) {
            var arrTemp = arrTmp[i].split("=");
            if (arrTemp[0].toUpperCase() == strName.toUpperCase()) {
                r = arrTemp[1];
                break;
            }
        }
        return r ? r : '';
    },
    add: function(strName, strValue, url) {
        url = url ? url : window.document.location.href;
        url = this.remove(strName, url);
        var intPos = url.indexOf("?");
        if (intPos > -1) {
            url += "&";
        }
        else {
            url += "?";
        }
        url += strName + "=" + strValue;
        return url;
    },
    //移除参数，多个参数用,分开
    remove: function(query, url) {
        if (url == "") return '';
        if (!url) url = window.document.location.href;
        if (!query) { return url; }
        query = query.trim() + ",";
        var pars = "", intPos = url.indexOf("?");
        if (intPos > -1) {
            pars = url.substr(intPos + 1);
            url = url.substr(0, intPos);
        }
        else {
            pars = "";
            //url = "";
        }
        var Pairs = pars.split(/[;&]/);
        pars = "";
        for (var i = 0; i < Pairs.length; i++) {
            var KeyVal = Pairs[i].split('=');
            if (!KeyVal || KeyVal.length != 2) { continue; }
            var key = unescape(KeyVal[0]);

            if (query.indexOf(key + ",") > -1) {
                continue;
            }
            pars += Pairs[i] + "&";
        }
        pars = pars != "" ? pars.substr(0, pars.length - 1) : pars;

        var r = "";
        r = pars != "" ? (url + (intPos > -1 ? "?" : "") + pars) : url;
        return r;
    },
    //url参数json
    json: function(url) {
        var Params = {};
        if (!url) { return Params; }
        var intPos = url.indexOf("?");
        if (intPos > -1) {
            url = url.substr(intPos + 1);
        }
        var Pairs = url.split(/[;&]/);
        for (var i = 0; i < Pairs.length; i++) {
            var KeyVal = Pairs[i].split('=');
            if (!KeyVal || KeyVal.length != 2) { continue; }
            var key = unescape(KeyVal[0]);
            var val = unescape(KeyVal[1]);
            val = val.replace(/\+/g, ' ');
            Params[key] = val;
        }
        return Params;
    },
    getObjectValue: function(obj) {
        var value = '';
        var arr = [];
        for (var item in obj) {
            arr.push(item + '=' + obj[item]);
        }
        return arr.join('&');
    }
};
//发布时间
Utils.Date = {
    oneDay: 1000 * 60 * 60 * 24,
    today: new Date(),
    getDate: function(d) {
        d = d.substring(0, d.indexOf(' ')).split('-');
        return new Date(d[1] + '/' + d[2] + '/' + d[0]);
    },
    getDays: function(d1) {
        d1 = this.getDate(d1);
        var d2 = new Date(this.today.getFullYear() + '/' + (this.today.getMonth() + 1) + '/' + this.today.getDate());
        var days = Math.ceil((d2.getTime() - d1.getTime()) / this.oneDay);
        return days;
    },
    getTimePast: function(d1) {
        var r = '';
        var days = this.getDays(d1);
        if (days == 0) r = '今天';
        else if (days < 7) r = days + '天前';
        else if (days < 30) r = Math.floor(days / 7) + '周前';
        else r = Math.floor(days / 30) + '月前';
        document.write(r);
    }
};
Utils.HTML = {
    getElementPos: function(elm) {
        var left = 0, top = 0;
        var parent = elm;
        while (parent) {
            left += parent.offsetLeft;
            top += parent.offsetTop;
            parent = parent.offsetParent;
        }
        return { x: left, y: top };
    },
    //获取一级域名
    getDomain: function(url) {
        //url = url.substring(7, url.indexOf('/', 7));
        url = url.substring(7);
        var n = url.indexOf("/");
        if (n > -1) {
            url = url.substring(0, n);
        }
        var arry = url.split('.');
        var count = arry.length - 1;
        if (count >= 2) {
            url = arry[count - 1] + '.' + arry[count];
        }
        return url;
    },
    getPath: function() {
        //debugger;
        var url = window.location.href;
        var k = url.lastIndexOf("/");
        url = url.substr(0, k + 1);
        return url;
    },
    getValueOfNoPx: function(valueString) {
        valueString = valueString.toString();
        if (!valueString || valueString == '')
            return null;
        if (valueString.indexOf("px")) {
            var i = valueString.indexOf("px");
            return Number(valueString.substring(0, i));
        }
        return Number(valueString);
    },
    getWindowWidth: function(doc) {
        if (!doc) {
            doc = window.document;
        }
        var vw = 0;
        var body = this.getHtmlBody(doc);
        vw = body.clientWidth;
        if (!vw || vw < 100) {
            vw = 1024;
        }
        return vw;
    },
    getWindowHeight: function(doc) {
        if (!doc) {
            doc = window.document;
        }
        var vh = 0;
        var body = this.getHtmlBody(doc);
        vh = body.clientHeight;
        if (!vh || vh < 300) {
            vh = 714;
        }
        return vh;
    },
    getHtmlBody: function(doc) {
        if (!doc) {
            doc = window.document;
        }
        var temp_h1 = doc.body.clientHeight;
        var temp_h2 = doc.documentElement.clientHeight;
        var isXhtml = (temp_h2 <= temp_h1 && temp_h2 != 0) ? true : false;
        return isXhtml ? doc.documentElement : doc.body;
    },
    getBrowserInfo: function() {
        var Sys = {};
        var ua = navigator.userAgent.toLowerCase();
        if (window.ActiveXObject)
            Sys.ie = ua.match(/msie ([\d.]+)/)[1]
        else if (document.getBoxObjectFor)
            Sys.firefox = ua.match(/firefox\/([\d.]+)/)[1]
        else if (window.MessageEvent && !document.getBoxObjectFor)
            Sys.chrome = ua.match(/chrome\/([\d.]+)/)[1]
        else if (window.opera)
            Sys.opera = ua.match(/opera.([\d.]+)/)[1]
        else if (window.openDatabase)
            Sys.safari = ua.match(/version\/([\d.]+)/)[1];
        return Sys;
    },
    appendStyle: function(id, file) {
        var styleId = 'styleFile' + id;
        if (document.getElementById(styleId)) return;
        var style = document.createElement('link');
        style.href = file;
        style.rel = 'stylesheet';
        style.type = 'text/css';
        style.id = styleId;
        document.getElementsByTagName('head')[0].appendChild(style);
    },
    drag: function(objId, srcId) {
        var doc = document;
        var src = null, obj = null;
        if (typeof (objId) == 'string') {
            obj = doc.getElementById(objId);
        }
        else if (typeof (objId) == 'object') {
            obj = objId;
        }
        else {
            return;
        }

        if (typeof (srcId) == 'string') {
            src = doc.getElementById(srcId);
        }
        else if (typeof (srcId) == 'object') {
            src = srcId;
        }
        else {
            src = obj;
        }
        src.onmousedown = function(evt) {
            if (!evt) evt = window.event;
            var d = doc;
            var x = evt.clientX - obj.offsetLeft;
            var y = evt.clientY - obj.offsetTop;
            obj.setCapture();

            d.onmousemove = function(evt) {
                if (!evt) evt = window.event;
                obj.style.left = evt.clientX - x;
                obj.style.top = evt.clientY - y;
            };

            d.onmouseup = function(evt) {
                if (!evt) evt = window.event;
                obj.releaseCapture();
                d.onmousemove = null;
                d.onmouseup = null;
                src.onmousedown = null;
            };
        }
    },
    cleanText: function(obj, state) {
        var name = 'value';
        var name2 = '_value';
        if (state == 1) {
            if (!obj[name2]) obj[name2] = obj[name];
            if (obj[name] == obj[name2]) obj[name] = '';
        }
        else if (state == 0) {
            if (this.trim(obj[name]) == '') obj[name] = obj[name2];
        }
    },
    swapImages: function(save) {
        var arr = arguments;
        for (var i = 1; i < arr.length; i = i + 2) {
            var obj = document.getElementById(arr[i]);
            if (obj) {
                if (save == 1) obj._src = obj.src;
                obj.src = arr[i + 1];
                if (save == 2) obj._src = obj.src;
            }
        }
    },
    restoreImages: function() {
        var arr = arguments;
        for (var i = 1; i < arr.length; i++) {
            var obj = document.getElementById(arr[i]);
            if (obj) obj.src = obj._src;
        }
    }
};

Utils.Validator = {
    isEmail: function(value) {
        var re = /^\w+@\w+\.\w+$/;
        return this.checkReg(re, value);
    },
    isUrl: function(str_url) {
        str_url = str_url.toLowerCase();
        var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
            + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@ 
            + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 
            + "|" // 允许IP和DOMAIN（域名）
            + "([0-9a-z_!~*'()-]+\.)*" // 域名- www. 
            + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名 
            + "[a-z]{2,6})" // first level domain- .com or .museum 
            + "(:[0-9]{1,4})?" // 端口- :80 
            + "((/?)|" // a slash isn't required if there is no file name 
            + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
        var re = new RegExp(strRegex);
        var r = false;
        if (re.test(str_url)) {
            r = true;
        }
        return r;
    },
    isNum: function(value) {
        var reg = /^[+-]?\d+$/; ///   /^\d+$/g;
        return reg.test(value);
    },
    isEmpty: function(value) {
        var re = /^\s+$/;
        return this.checkReg(re, value);
    },
    checkReg: function(re, value) {
        if (!value) return false;
        if (typeof (value) == 'string') return re.test(value);
        else if (typeof (value) == 'object' && value.length) {
            for (var i = 0; i < value.length; i++) if (!re.test(value[i])) return false;
        }
        return true;
    }
};
function bindFrameReady(frm, callback, time) {
    if (!time) {
        time = 200;
    }
    if (frm.readyState == "complete") {
        window.setTimeout(function() {
            callback();
        }, time);
    }
    else {
        frm.onreadystatechange = function() {
            if (this.readyState == "complete") {
                window.setTimeout(function() {
                    callback();
                }, time);
            }
        };
    }
}
function selectTab(tab) {
    showTabs('infolist', tab, 'li', 'current');
}
function showTabs(id, select, element, css) {
    var o = getObj(id);
    var t = o.getElementsByTagName(element);
    for (var i = 0; i < t.length; i++) {
        var tid = t[i].getAttribute("id");
        if (tid) {
            var oo = getObj(tid);
            if (tid == select) {
                getObj(tid).className = css;
                getObj('info_' + tid).style.display = '';
            } else {
                getObj(tid).className = '';
                getObj('info_' + tid).style.display = 'none';
            }
        }
    }
    if (getObj('info_type')) {
        getObj('info_type').value = select;
    }
    return false;
}
function jsAddItemToSelect(objSelect, objItemText, objItemValue) {
    var varItem = new Option(objItemText, objItemValue);
    objSelect.options.add(varItem);
}
function jsSelectIsExitItem(objSelect, objItemValue) {
    var isExit = false;
    for (var i = 0; i < objSelect.options.length; i++) {
        if (objSelect.options[i].value == objItemValue) {
            isExit = true;
            break;
        }
    }
    return isExit;
}
