// 取得用戶端的瀏覽器種類 function GetBrowserInfo() { var Browser = { Name:'', FullVersion:'', MajorVersion:'', AppName:'', UserAgent:'', Support:{} }; var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browserName = navigator.appName; var fullVersion = '' + parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion, 10); var nameOffset, verOffset, ix; // Microsoft Edge if ((verOffset=nAgt.indexOf(" Edge/")) != -1) { browserName = "MS Edge"; fullVersion = nAgt.substring(verOffset+6); } // In Opera 15+, the true version is after " OPR/" else if ((verOffset=nAgt.indexOf(" OPR/")) != -1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset+5); } // In older Opera, the true version is after "Opera" or after "Version" else if ((verOffset=nAgt.indexOf("Opera")) != -1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset+6); if ((verOffset=nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset+8); } else if (!!window.opera) { browserName = "Opera"; fullVersion = 'Unknown'; } // In Chrome, the true version is after "Chrome" else if ((verOffset=nAgt.indexOf("Chrome")) != -1) { browserName = "Chrome"; fullVersion = nAgt.substring(verOffset+7); } // In Safari, the true version is after "Safari" or after "Version" else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { browserName = "Safari"; fullVersion = nAgt.substring(verOffset+7); if ((verOffset=nAgt.indexOf("Version"))!=-1) fullVersion = nAgt.substring(verOffset+8); } // In Firefox, the true version is after "Firefox" else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { browserName = "Firefox"; fullVersion = nAgt.substring(verOffset+8); } // In MSIE, the true version is after "MSIE" in userAgent else if ((verOffset=nAgt.indexOf("MSIE")) != -1) { browserName = "MSIE"; fullVersion = nAgt.substring(verOffset+5); } else if ((verOffset=nAgt.indexOf(" rv:")) != -1) { browserName = "MSIE"; fullVersion = nAgt.substring(verOffset+4); } // In most other browsers, "name/version" is at the end of userAgent else if ((nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/'))) { browserName = nAgt.substring(nameOffset,verOffset); fullVersion = nAgt.substring(verOffset+1); if (browserName.toLowerCase()==browserName.toUpperCase()) browserName = navigator.appName; } // trim the fullVersion string at semicolon/space if present if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix); if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix); majorVersion = parseInt(''+fullVersion, 10); if (isNaN(majorVersion)) { fullVersion = ''+parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion,10); } Browser.Name = String(browserName); Browser.FullVersion = String(fullVersion); Browser.MajorVersion = String(majorVersion); Browser.AppName = String(navigator.appName); Browser.UserAgent = String(navigator.userAgent); // detect support function var oInput = document.createElement("input"); oInput.setAttribute("type", "color"); if (oInput.type != "color") { Browser.Support.InputColor = false; } else { Browser.Support.InputColor = true; } delete oInput; return Browser; } function ResizeScreen() { setCookie(['SCREEN_SIZE','WIDTH'], screen.width, 7, '/'); setCookie(['SCREEN_SIZE','HEIGHT'], screen.height, 7, '/'); if ('StockPainter' in window) { RepaintStockChart(StockPainter); } if ('ShowFloatScrollTool' in window) { ShowFloatScrollTool(); } //ShowFooterStickyAD(); } function ScrollWindow() { if ('StockPainter' in window) { RepaintStockChart(StockPainter); } if ('ShowFloatScrollTool' in window) { ShowFloatScrollTool(); } } function ShowFloatScrollTool() { for (var i=0; i= oReport.clientWidth || oParent.style.display == 'none' || oReport.style.display == 'none') { sHeader = 'none'; sScrollBar = 'none'; } var y = RealPosY(oParent) - PageYOffset(); if (y > window.innerHeight || y + oParent.clientHeight < 0) { sHeader = 'none'; sScrollBar = 'none'; } if (oHeader != null) { oHeader.style.display = sHeader; if (TypeName(oReport) == '[object HTMLTableElement]') { for (var j=0;j screen.width && screen.height >= 200*3) { divFooterStickyAD.style.display = ''; } else { divFooterStickyAD.style.display = 'none'; } } } // 取得網頁實際高度 function GetPageHeight() { return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight); } // 修改row的底色 function ChgBGColor(id, color) { for (var i=0;i= 0) { result = result + 1; } return result; } function Len(s) { return String(s).length; } function LenMbcs(s) { return LenMBCS(s); } function LenMBCS(s) { var iLen = 0; for (var i = 0; i < String(s).length; i++) { var j = String(s).charCodeAt(i); iLen = iLen + ((j > 255 || j < 0)?2:1); } return iLen; } function Split(s, sTag) { return String(s).split(sTag); } function Join(arr, sTag) { return arr.join(sTag); } function UCase(s) { return String(s).toUpperCase(); } function LCase(s) { return String(s).toLowerCase(); } function Trim(s) { return String(s).trim(); } function LTrim(s) { return String(s).trimStart(); } function RTrim(s) { return String(s).trimEnd(); } function NVL(v, r) { if (r == undefined) { r = ''; } if (v == undefined) { return r; } if (v == null) { return r; } if (v == '') { return r; } return v; } function DVL(v, r) { return (IsDate(v)?v:r); } function NumVL(v, r) { return (IsNumeric(v)?v:r); } function TypeName(o) { return Object.prototype.toString.call(o); } function ReplaceBetween(sExpression, sFindStart, sFindEnd, sReplace, sCompare) { if (sCompare == undefined) { sCompare = 'gi'; } var re = new RegExp(escapeRegExp(sFindStart) + '(.*?)' + escapeRegExp(sFindEnd), sCompare); return String(sExpression).replace(re, sReplace); } function export2xls(s, sFileName) { export2html(s, sFileName); } function export2html(s, sFileName) { var s1, s2, i, j; // Replace link tag s = s.replace(/<\/a>/gi,'<\/font>'); while (s.search(/= 0) { i = s.search(/',i); s1 = s.substring(i,j+1); if (s1.search(/ class=/i) >= 0 && s1.search(/link_/i) >= 0) { if (s1.search(/link_red/i) >= 0) s2 = '' else if (s1.search(/link_yellow/i) >= 0) s2 = '' else if (s1.search(/link_green/i) >= 0) s2 = '' else if (s1.search(/link_blue/i) >= 0) s2 = '' else if (s1.search(/link_gray/i) >= 0) s2 = '' else if (s1.search(/link_orange/i) >= 0) s2 = '' else if (s1.search(/link_white/i) >= 0) s2 = '' else s2 = ''; } else { s2 = ''; } s = s.substring(0,i) + s2 + s.substring(j+1,s.length); } // Remove event tag s = s.replace(/onmouseout=/gi,'xxx='); s = s.replace(/onmouseover=/gi,'xxx='); // 清除DummyTHead s = ReplaceBetween(s,'','','') // Add html tag if (Right(sFileName,5).toLowerCase() == '.html' || Right(sFileName,4).toLowerCase() == '.htm') { s = '' + '' + '' + '' + '' + '' + '' + s + ''; } else { s = ReplaceBetween(s,'','','') //清除DummyTR s = Replace(s,'class=\'bg_h0\'','bgcolor=\'#e3eef8\''); s = Replace(s,'class=\'bg_h1\'','bgcolor=\'#e3eef8\''); s = Replace(s,'class=\'bg_h2\'','bgcolor=\'#d7e6f4\''); s = Replace(s,'class="bg_h0"','bgcolor="#e3eef8"'); s = Replace(s,'class="bg_h1"','bgcolor="#e3eef8"'); s = Replace(s,'class="bg_h2"','bgcolor="#d7e6f4"'); s = Replace(s,''; } // Save file if(window.navigator.msSaveOrOpenBlob) { var blobObject = new Blob(['\uFEFF'+s],{type: 'text/htm;charset=utf-8;'}); window.navigator.msSaveOrOpenBlob(blobObject, sFileName); } else if (navigator.appName != 'Microsoft Internet Explorer') { var blobObject = new Blob(['\uFEFF'+s],{type: 'text/htm;charset=utf-8;'}); if ('export2html_A' in window) { var object = document.getElementById('export2html_A'); } else { var object = document.createElement('A') object.setAttribute('id','export2html_A') object.target = '_blank'; object.style.display = 'none'; document.body.appendChild(object); } object.href = URL.createObjectURL(blobObject); object.download = sFileName; object.click(); } else { if ('export2html_B' in window) { var object = document.getElementById('export2html_B'); } else { var object = document.createElement('IFRAME'); object.setAttribute('id','export2html_B'); object.style.display = 'none'; document.body.appendChild(object); } if (object.contentDocument) { var doc = object.contentDocument; } else if (object.contentWindow) { var doc = object.contentWindow.document; } else { alert('很抱歉,您的瀏覽器無法支援此匯出功能!'); return; } doc.open('application/htm','replace'); doc.charset = 'utf-8'; doc.write(s); doc.close(); doc.execCommand('SaveAs', null, sFileName); } } function export2csv(s, sFileName) { if(window.navigator.msSaveOrOpenBlob) { var blobObject = new Blob(['\uFEFF'+s],{type: 'text/csv;charset=utf-8;'}); window.navigator.msSaveOrOpenBlob(blobObject, sFileName); } else if (navigator.appName == 'Microsoft Internet Explorer') { if ('export2csv_B' in window) { var object = document.getElementById('export2csv_B'); } else { var object = document.createElement('IFRAME'); object.setAttribute('id','export2csv_B'); object.style.display = 'none'; document.body.appendChild(object); } if (object.contentDocument) { var doc = object.contentDocument; } else if (object.contentWindow) { var doc = object.contentWindow.document; } else { alert('很抱歉,您的瀏覽器無法支援此CSV匯出功能!'); return; } doc.open('application/csv','replace'); doc.charset = 'utf-8'; doc.write(s); doc.close(); doc.execCommand('SaveAs', null, sFileName); } else { var blobObject = new Blob(['\uFEFF'+s],{type: 'text/csv;charset=utf-8;'}); if ('export2csv_A' in window) { var object = document.getElementById('export2csv_A'); } else { var object = document.createElement('A') object.setAttribute('id','export2csv_A') object.target = '_blank'; object.style.display = 'none'; document.body.appendChild(object); } object.href = URL.createObjectURL(blobObject); object.download = sFileName; object.click(); } } function IsNumeric(s) { return (s != null && String(s) != '' && !isNaN(s)?true:false); } function IsInt(v) { return Number.isInteger(Number(v)) } function IsFloat(v) { return IsNumeric(v) && !Number.isInteger(Number(v)) } function IsDate(s) { return (s != null && new Date(s) !== "Invalid Date" && !isNaN(new Date(s))) ? true : false; } function GetStrNum(s, sEmptyReturn) { if (sEmptyReturn == undefined) { sEmptyReturn = ''; } return NVL(String(s).replace( /[^\d\.]*/g, ''), sEmptyReturn); } function escape2(s) { var result = escape(s); result = String(result).replace(/\+/g,'%2B'); return result; } function escapeRegExp(s) { return String(s).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } function WeekName(d) { var result = ''; if (IsDate(d)) { var i = new Date(d).getDay(); if (i == 0) { result = '日'; } else if (i == 1) { result = '一'; } else if (i == 2) { result = '二'; } else if (i == 3) { result = '三'; } else if (i == 4) { result = '四'; } else if (i == 5) { result = '五'; } else if (i == 6) { result = '六'; } } return result; } function DisableSelect() { var s = document.body.className; if (s.indexOf('disable_select') == -1) { document.body.className = s + (s==''?'':' ') + 'disable_select'; } } function EnableSelect() { var s = document.body.className; s = String(s).replace('disable_select',''); s = String(s).replace(' ',' '); document.body.className = String(s).trim(); } function IsObjectExist(oParent, sChildObject) { var arr = Split(Replace(sChildObject,' ',''),'.'); if (arr.length <= 0) return false; var o = oParent; for (var v of arr) { if (!(o[v])) return false; o = o[v]; } return true; } function ReloadReport(sHREF, oTarget, oLoading, iScrollTo) { var oArgs = {}; oArgs.oTarget = oTarget; oArgs.oLoading = oLoading; if (IsNumeric(iScrollTo)) { oArgs.iScrollTo = iScrollTo; } document.body.style.cursor = 'progress'; if (oLoading) { setTimeout(function(){ ShowLoading(oLoading) }, 100); } CallXMLHttp('POST', sHREF, '', CB_ReloadReport, oArgs); } function CB_ReloadReport(result, oArgs) { if (result.result) { oArgs.oTarget.innerHTML = result.responseText; } else { alert(result.responseText); } if ('ShowFloatScrollTool' in window) { ShowFloatScrollTool(); } if (googletag) { googletag.pubads().refresh(); } if (oArgs.oLoading) { oArgs.oLoading.style.display = 'none'; } document.body.style.cursor = 'default'; if (IsNumeric(oArgs.iScrollTo)) { window.scrollTo({ top:oArgs.iScrollTo, behavior:'smooth' }); } } function ShowLoading(oLoading, sMsg, iStep) { if (!IsNumeric(iStep)) { iStep = 0; oLoading.style.display = ''; if (sMsg && Trim(sMsg) != '') oLoading.innerText = Trim(sMsg); else if (Trim(oLoading.innerHTML) == '') oLoading.innerText = '(載入中)'; } if (oLoading.style.display == '' && Trim(oLoading.innerText) != '') { var s = oLoading.innerText; var iLen = Len(s); if (iStep >=0 && iStep < iLen) { iStep = iStep + 1; oLoading.innerHTML = Left(s,iStep-1) + '' + Mid(s,iStep,1) + '' + Mid(s,iStep+1); setTimeout(function(){ ShowLoading(oLoading, null, iStep) }, 80); } else { iStep = 0; oLoading.innerHTML = s; setTimeout(function(){ ShowLoading(oLoading, null, iStep) }, 240); } } } function CallXMLHttp(sGET_POST, sCallPage, sQryStr, oCallback, oCallbackArgs) { var xmlhttp = false; if (sGET_POST == undefined) { sGET_POST = 'POST'; } sCallPage = String(sCallPage).replace(/^\s+|\s+$/g,''); sQryStr = String(sQryStr).replace(/^\s+|\s+$/g,''); if (sCallPage.length == 0) { var r = { result: false, responseText: '參數未定義' }; if (TypeName(oCallback) == '[object Function]') { oCallback(r, oCallbackArgs); }; } xmlhttp = new XMLHttpRequest(); if (TypeName(oCallback) == '[object Function]') { xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var r = {}; r.responseText = NVL(xmlhttp.responseText); r.result = true; oCallback(r, oCallbackArgs); } } } xmlhttp.open(sGET_POST, sCallPage, true); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); xmlhttp.send(sQryStr); } function TimeNameTrans(sName) { s = UCase(sName); if (s == "日") { return "DATE"; } else if (s == "周" || s == "週") { return "WEEK"; } else if (s == "月") { return "MONTH"; } else if (s == "季" || s == "季度" || s == "單季" || s == "累季") { return "QUAR"; } else if (s == "年" || s == "年度") { return "YEAR"; } else if (s == "四季" || s == "近四季" || s == "近4Q") { return "Y4Q"; } else if (s == "第一季") { return "Q1"; } else if (s == "第二季") { return "Q2"; } else if (s == "第三季") { return "Q3"; } else if (s == "第四季") { return "Q4"; } else if (s == "DATE" || s == "D") { return "日"; } else if ((s == "WEEK" || s == "W") && "StockTW" == "StockCN") { return "周"; } else if (s == "WEEK" || s == "W") { return "週"; } else if (s == "MONTH" || s == "M") { return "月"; } else if (s == "QUAR" || s == "Q") { return "季"; } else if (s == "YEAR" || s == "Y") { return "年"; } else if (s == "Y4Q") { return "近四季"; } else if (s == "Q1") { return "第一季"; } else if (s == "Q2") { return "第二季"; } else if (s == "Q3") { return "第三季"; } else if (s == "Q4") { return "第四季"; } else if (s == "月增率" || s == "月增(%)" || s == "月增%") { return "MoM"; } else if (s == "季增率" || s == "季增(%)" || s == "季增%") { return "QoQ"; } else if (s == "年增率" || s == "年增(%)" || s == "年增%") { return "YoY"; } else if (s == "MOM") { return "月增率"; } else if (s == "QOQ") { return "季增率"; } else if (s == "YOY") { return "年增率"; } else if (InStr("|日|周|週|月|季|年|","|"+Right(s,1)+"|") > 0) { return NumberNameTrans(Left(sName,Len(sName)-1)) & Left(TimeNameTrans(Right(sName,1)),1); } else { return sName; } } function NumberNameTrans(sName) { switch (sName) { case "0": return "零"; case "1": return "一"; case "2": return "二"; case "3": return "三"; case "4": return "四"; case "5": return "五"; case "6": return "六"; case "7": return "七"; case "8": return "八"; case "9": return "九"; case "10": return "十"; case "11": return "十一"; case "12": return "十二"; case "13": return "十三"; case "14": return "十四"; case "15": return "十五"; case "16": return "十六"; case "17": return "十七"; case "18": return "十八"; case "19": return "十九"; case "20": return "二十"; case "零","零個": return "0"; case "一","一個": return "1"; case "二","二個": return "2"; case "三","三個": return "3"; case "四","四個": return "4"; case "五","五個": return "5"; case "六","六個": return "6"; case "七","七個": return "7"; case "八","八個": return "8"; case "九","九個": return "9"; case "十","十個": return "10"; case "十一","十一個": return "11"; case "十二","十二個": return "12"; case "十三","十三個": return "13"; case "十四","十四個": return "14"; case "十五","十五個": return "15"; case "十六","十六個": return "16"; case "十七","十七個": return "17"; case "十八","十八個": return "18"; case "十九","十九個": return "19"; case "二十","二十個": return "20"; default: return sName; } } (function () { /*if (!Event.hasOwnProperty("fromElement") && Event.prototype.__defineGetter__) { Event.prototype.__defineGetter__("fromElement", function () { var node; if (this.type == "mouseover") node = this.relatedTarget; else if (this.type == "mouseout") node = this.target; if (!node) return; while (node.nodeType != 1) node = node.parentNode; return node; }); Event.prototype.__defineGetter__("toElement", function () { var node; if (this.type == "mouseout") node = this.relatedTarget; else if (this.type == "mouseover") node = this.target; if (!node) return; while (node.nodeType != 1) node = node.parentNode; return node; }); }*/ function windowHelper() { this.tapTimeLimit = 500; } Array.prototype.each = function (func, startIndex, endIndex) { startIndex = startIndex || 0; endIndex = endIndex || this.length - 1; for (var i = startIndex; i <= endIndex; i++) { func(this[i], this, i); if (this.breakLoop) { this.breakLoop = false; break; } } }; windowHelper.prototype = { preventDefaultEvent: function (ev) { if (ev.preventDefault) ev.preventDefault(); else ev.returnValue = false; }, IsTouchDevice: function () { return !!('ontouchstart' in window); }, isTouchDevice: function () { return !!('ontouchstart' in window); }, ToMoney: function (val, val2, bAutoAdjust) { return toMoney(val, val2, bAutoAdjust); }, toMoney: function (val, val2, bAutoAdjust) { var arrRound, iMaxRound; if (IsFloat(val2)) { bAutoAdjust = true; } if (bAutoAdjust == undefined || bAutoAdjust == null) { bAutoAdjust = false; } if (!IsNumeric(val2)) { val2 = 2; } arrRound = Split(Math.round(val2*Math.pow(10,8))/Math.pow(10,8),'.'); if (!IsNumeric(val)) { return val; } else if (!bAutoAdjust) { return val.toFixed(arrRound[0]); } else { //自動調整小數點 var i = String(-Math.floor(-Math.abs(val))).length; //取得整數位數 if (arrRound.length > 1) { if (Number(arrRound[1]) < Number(arrRound[0]) - i + 1) { iMaxRound = Number(arrRound[1]); } else { iMaxRound = Number(arrRound[0]) - i + 1; } } else { iMaxRound = Number(arrRound[0]) - i + 1; } if (Number(arrRound[0]) >= i) { return val.toFixed(iMaxRound); } else { return val.toFixed(0); } } }, Round: function (val, val2, bAutoAdjust) { if (bAutoAdjust == undefined || bAutoAdjust == null) { bAutoAdjust = false; } return autoRound(val, val2, bAutoAdjust); }, AutoRound: function (val, val2, bAutoAdjust) { return autoRound(val, val2, bAutoAdjust); }, autoRound: function (val, val2, bAutoAdjust) { var arrRound, iMaxRound; if (IsFloat(val2) || bAutoAdjust == undefined || bAutoAdjust == null) { bAutoAdjust = true; } if (!IsNumeric(val2)) { val2 = 2; } arrRound = Split(Math.round(val2*Math.pow(10,8))/Math.pow(10,8),'.'); if (!IsNumeric(val)) { return val; } else if (!bAutoAdjust) { return Math.round(val*Math.pow(10,arrRound[0]))/Math.pow(10,arrRound[0]); } else { //自動調整小數點 var i = String(-Math.floor(-Math.abs(val))).length; //取得整數位數 if (arrRound.length > 1) { if (Number(arrRound[1]) < Number(arrRound[0]) - i + 1) { iMaxRound = Number(arrRound[1]); } else { iMaxRound = Number(arrRound[0]) - i + 1; } } else { iMaxRound = Number(arrRound[0]) - i + 1; } if (Number(arrRound[0]) >= i) { return Math.round(val*Math.pow(10,iMaxRound))/Math.pow(10,iMaxRound); } else { return Math.round(val); } } }, BigNumberToText: function (val, val2, bAutoAdjust) { return bigNumberToText(val, val2, bAutoAdjust); }, bigNumberToText: function (val, val2, bAutoAdjust) { if (!IsNumeric(val)) return val; if (!IsNumeric(val2)) { val2 = 2; } if (bAutoAdjust == undefined || bAutoAdjust == null) { bAutoAdjust = false; } var jau = val / 1000000000000; if (jau >= 1 || jau <= -1) { return AutoRound(jau, val2, bAutoAdjust) + '兆'; } else { var yi = val / 100000000; if (yi >= 1 || yi <= -1) { return AutoRound(yi, val2, bAutoAdjust) + (conSysNM=='StockCN'?'亿':'億'); } else { var wan = val / 10000; if (wan >= 1 || wan <= -1) { return AutoRound(wan, val2, bAutoAdjust) + (conSysNM=='StockCN'?'万':'萬'); } else { return AutoRound(val, val2, bAutoAdjust); } } } }, getScalesSpace: function (fStart, fEnd, iLineCnt) { var result = 0.01; while ((fEnd - fStart) / result > iLineCnt && result < 10000000000000000) { if (result < 1 && String(result).substr(String(result).length-1,1) == '1') {result = result * 2;} else if (result < 1 && String(result).substr(String(result).length-1,1) == '2') {result = result * 1.25;} else if (result < 1 && String(result).substr(String(result).length-2,2) == '25') {result = result * 2;} else if (result < 1 && String(result).substr(String(result).length-1,1) == '5') {result = result * 2;} else if (result >= 1 && String(result).substr(0,1) == '1') {result = result * 2;} else if (result >= 1 && ((String(result).substr(0,2) == '20') || (result == 2))) {result = result * 1.25;} else if (result >= 1 && ((String(result).substr(0,2) == '25') || (result == 2.5))) {result = result * 2;} else if (result >= 1 && String(result).substr(0,1) == '5') {result = result * 2;} else {result = 10000000000000000;} } return result; }, getUnitSpace: function (fVal) { var result = 0, fUnit = 0.000001; if (fVal == null) return 1; for (fUnit = 0.000001; (fUnit <= 1000000000000) && (result == 0); fUnit = fUnit * 10) { if (fVal < fUnit) result = fUnit / 10; else if (fVal < fUnit * 2) result = 2 * fUnit / 10; else if (fVal < fUnit * 2.5 && fUnit >= 10) result = 2.5 * fUnit / 10; else if (fVal < fUnit * 5) result = 5 * fUnit / 10; } return (result==0?1:result); }, getLevelUnit: function (val) { if (val < 1000) { return { 'level': 100, 'unit': '百' }; } else if (val < 10000) { return { 'level': 1000, 'unit': '千' }; } else if (val < 100000000) { return { 'level': 10000, 'unit': '萬' }; } else if (val < 100000000 * 10000) { return { 'level': 100000000, 'unit': '億' }; } else { return { 'level': 100000000 * 10000, 'unit': '兆' }; } }, getOffset: function (e) { if (!isNaN(e.offsetX) && !isNaN(e.offsetY)) { return e; } var target = e.target; if (target.offsetLeft == undefined) { target = target.parentNode; } var pageCoord = getPageCoord(target); var eventCoord = { x: window.pageXOffset + e.clientX, y: window.pageYOffset + e.clientY }; var offset = { offsetX: eventCoord.x - pageCoord.x, offsetY: eventCoord.y - pageCoord.y }; //e.offsetX = offset.offsetX; //e.offsetY = offset.offsetY; return offset; }, getPageCoord: function (element) { var coord = { x: 0, y: 0 }; while (element) { coord.x += element.offsetLeft; coord.y += element.offsetTop; element = element.offsetParent; } return coord; }, addLoadEvent: function (f) { var old = window.onload; if (typeof old != 'function') window.onload = f; else { window.onload = function () { old(); f(); }; } }, addEvent: function (elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; } else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r; } else { elm['on' + evType] = fn; } }, getEventTarget: function (e) { return e.srcElement || e.target || e.relatedTarget; }, $id: function (id) { return document.getElementById(id); } }; window.extendObject = function (src, dest) { for (var f in src) { dest[f] = src[f]; } }; window.extendWindow = function (src) { extendObject(src, window); }; var wh = new windowHelper(); extendWindow(wh); window.getQueryParam = function (paramName, isTop) { var oRegex = new RegExp('[\?&]' + paramName + '=([^&]+)', 'i'); var oMatch = oRegex.exec(isTop ? window.top.location.search : location.search); if (oMatch && oMatch.length > 1) return decodeURIComponent(oMatch[1]); else return ''; }; window.debug = getQueryParam('debug'); window.setDebugMsg = function (msg) { if (window.debug) { try { var oid = 'debug'; var o = $id(oid); if (!o) { o = document.createElement('DIV'); o.id = oid; document.body.appendChild(o); } o.innerHTML = (window.debug == 2 ? (msg + '
' + o.innerHTML) : msg); } catch (err) { alert(msg + ';error:' + err); } } }; })();