/* json.js 2007-03-20 Public Domain This file adds these methods to JavaScript: array.toJSONString() boolean.toJSONString() date.toJSONString() number.toJSONString() object.toJSONString() string.toJSONString() These methods produce a JSON text from a JavaScript value. It must not contain any cyclical references. Illegal values will be excluded. The default conversion for dates is to an ISO string. You can add a toJSONString method to any date object to get a different representation. string.parseJSON(filter) This method parses a JSON text to produce an object or array. It can throw a SyntaxError exception. The optional filter parameter is a function which can filter and transform the results. It receives each of the keys and values, and its return value is used instead of the original value. If it returns what it received, then structure is not modified. If it returns undefined then the member is deleted. Example: // Parse the text. If a key contains the string 'date' then // convert the value to a date. myData = text.parseJSON(function (key, value) { return key.indexOf('date') >= 0 ? new Date(value) : value; }); It is expected that these methods will formally become part of the JavaScript Programming Language in the Fourth Edition of the ECMAScript standard in 2008. This file will break programs with improper for..in loops. See http://yuiblog.com/blog/2006/09/26/for-in-intrigue/ This is a reference implementation. You are free to copy, modify, or redistribute. Use your own copy. It is extremely unwise to load untrusted third party code into your pages. */ // Augment the basic prototypes if they have not already been augmented. if (typeof(Object.prototype.toJSONString)=='undefined') { Array.prototype.toJSONString = function () { var a = ['['], // The array holding the text fragments. b, // A boolean indicating that a comma is required. i, // Loop counter. l = this.length, v; // The value to be stringified. function p(s) { // p accumulates text fragments in an array. It inserts a comma before all // except the first fragment. if (b) { a.push(','); } a.push(s); b = true; } // For each value in this array... for (i = 0; i < l; i += 1) { v = this[i]; switch (typeof v) { // Serialize a JavaScript object value. Ignore objects thats lack the // toJSONString method. Due to a specification error in ECMAScript, // typeof null is 'object', so watch out for that case. case 'object': if (v) { if (typeof v.toJSONString === 'function') { p(v.toJSONString()); } } else { p("null"); } break; // Otherwise, serialize the value. case 'string': case 'number': case 'boolean': p(v.toJSONString()); // Values without a JSON representation are ignored. } } // Join all of the fragments together and return. a.push(']'); return a.join(''); }; Boolean.prototype.toJSONString = function () { return String(this); }; Date.prototype.toJSONString = function () { // Ultimately, this method will be equivalent to the date.toISOString method. function f(n) { // Format integers to have at least two digits. return n < 10 ? '0' + n : n; } return '"' + this.getFullYear() + '-' + f(this.getMonth() + 1) + '-' + f(this.getDate()) + 'T' + f(this.getHours()) + ':' + f(this.getMinutes()) + ':' + f(this.getSeconds()) + '"'; }; Number.prototype.toJSONString = function () { // JSON numbers must be finite. Encode non-finite numbers as null. return isFinite(this) ? String(this) : "null"; }; /* Object.prototype.toJSONString = function () { var a = ['{'], // The array holding the text fragments. b, // A boolean indicating that a comma is required. k, // The current key. v; // The current value. function p(s) { // p accumulates text fragment pairs in an array. It inserts a comma before all // except the first fragment pair. if (b) { a.push(','); } a.push(k.toJSONString(), ':', s); b = true; } // Iterate through all of the keys in the object, ignoring the proto chain. for (k in this) { if (this.hasOwnProperty(k)) { v = this[k]; switch (typeof v) { // Serialize a JavaScript object value. Ignore objects that lack the // toJSONString method. Due to a specification error in ECMAScript, // typeof null is 'object', so watch out for that case. case 'object': if (v) { if (typeof v.toJSONString === 'function') { p(v.toJSONString()); } } else { p("null"); } break; case 'string': case 'number': case 'boolean': p(v.toJSONString()); // Values without a JSON representation are ignored. } } } // Join all of the fragments together and return. a.push('}'); return a.join(''); }; */ (function (s) { // Augment String.prototype. We do this in an immediate anonymous function to // avoid defining global variables. // m is a table of character substitutions. var m = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }; s.parseJSON = function (filter) { // Parsing happens in three stages. In the first stage, we run the text against // a regular expression which looks for non-JSON characters. We are especially // concerned with '()' and 'new' because they can cause invocation, and '=' // because it can cause mutation. But just to be safe, we will reject all // unexpected characters. try { if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/. test(this)) { // In the second stage we use the eval function to compile the text into a // JavaScript structure. The '{' operator is subject to a syntactic ambiguity // in JavaScript: it can begin a block or an object literal. We wrap the text // in parens to eliminate the ambiguity. var j = eval('(' + this + ')'); // In the optional third stage, we recursively walk the new structure, passing // each name/value pair to a filter function for possible transformation. if (typeof filter === 'function') { function walk(k, v) { if (v && typeof v === 'object') { for (var i in v) { if (v.hasOwnProperty(i)) { v[i] = walk(i, v[i]); } } } return filter(k, v); } j = walk('', j); } return j; } } catch (e) { // Fall through if the regexp test fails. } throw new SyntaxError("parseJSON"); }; s.toJSONString = function () { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can simply slap some quotes around it. // Otherwise we must also replace the offending characters with safe // sequences. if (/["\\\x00-\x1f]/.test(this)) { return '"' + this.replace(/([\x00-\x1f\\"])/g, function(a, b) { var c = m[b]; if (c) { return c; } c = b.charCodeAt(); return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); }) + '"'; } return '"' + this + '"'; }; })(String.prototype); } /* ajax.js */ function Ajax(url, args) { this.url = url || ""; if (this.url.indexOf('?') != -1) this.url = this.url + '&from=' + window.location.host; else this.url = this.url + '?from=' + window.location.host; this.params = args.parameters || ""; this.mime = args.mime || "text/html"; this.onComplete = args.onComplete || this.defaultOnCompleteFunc; this.onLoading= args.onLoading || this.defaultOnLoadingFunc; this.onError = args.onError || this.defaultOnErrorFunc; this.onTimeout = args.onTimeout || this.defaultOnTimeoutFunc; this.timeout = args.timeout || 0; this.method = args.method || "post"; if (typeof(args.sync) == "undefined" || args.sync == null) { this.sync = true; } else { this.sync = args.sync ? true : false; } this.loadData(); this.timer = null; if (this.timeout){ this.timer = window.setTimeout(this.onTimeout, this.timeout); } } Ajax.prototype = { READY_STATE_COMPLETE : 4, getRequest : function () { var funcs = [ function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')}, function() {return new XMLHttpRequest()}, ]; var req = null; for (var i = 0; i < funcs.length; i++) { var f = funcs[i]; try { req = f(); break; } catch (e) {} } return req || false; }, //NOTE: yinwm -- convert paramater map to string parseParams : function () { if (typeof (this.params) == "string") { return this.params; } else { var s = ""; for (var k in this.params) { s += k + "=" + this.params[k] + "&"; } return s; } }, loadData : function () { this.req = this.getRequest(); if (this.req) { this.onLoading(); try { var loader = this; this.req.onreadystatechange = function () { if (loader.req.readyState == loader.READY_STATE_COMPLETE) { window.clearTimeout(loader.timer); try { loader.onComplete.call(loader, loader.req); } catch(E) { } } } this.req.open(this.method, this.url, this.sync); if (this.method == "post") { this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); } if (this.req.overrideMimeType) { this.req.overrideMimeType(this.mime); } this.req.send(this.method == "post" ? this.parseParams(this.params) : null); } catch(e) { window.clearTimeout(this.timer); this.onError.call(this, e); } } }, defaultOnCompleteFunc : function () { }, defaultOnLoadingFunc : function () { }, defaultOnErrorFunc : function (error) { }, defaultOnTimeoutFunc : function () { } } /* ajaj.js */ AJAJ_CALLBACKS = {}; function AJAJ_ON_READYSTATE_CHANGE(ajajID, dataStr) { if(AJAJ_CALLBACKS[ajajID]) { try { AJAJ_CALLBACKS[ajajID](dataStr); } catch(E) { } } } function Ajaj(url, args) { this.id=Number(new Date()).toString()+parseInt(10*Math.random())+parseInt(10*Math.random())+parseInt(10*Math.random()); this.url = url || ""; this.params = args.parameters || {}; this.onComplete = args.onComplete || this.defaultOnCompleteFunc; this.onLoading= args.onLoading || this.defaultOnLoadingFunc; this.onError = args.onError || this.defaultOnErrorFunc; this._start(); } Ajaj.prototype = { _start : function () { this.sender = document.createElement("SCRIPT"); this.sender.id = this.sender.name = "SCRIPT_REQUESTER_" + this.id; this.sender.type = 'text/javascript'; document.getElementsByTagName("head")[0].appendChild(this.sender); this.loadData(); }, parseParams : function () { var s = ""; if(this.params) { for (var k in this.params) { if(k == 'toJSONString') continue; s += k + "=" + this.params[k] + "&"; } } s += 'crossdomain=' + this.id + '&from=' + window.location.host; return s; }, loadData : function () { if (this.sender) { this.onLoading(); try { AJAJ_CALLBACKS[this.id] = null; AJAJ_CALLBACKS[this.id] = function (jsReturn) { this.onComplete(jsReturn); window.setTimeout(this.destroy.bind(this), 100); }.bind(this); //alert(this.id); this.sender.onreadystatechange = this.sender.onload = function () {}; var paras=this.parseParams(this.params); var srcURL = ''; if (this.url.indexOf('?') != -1) srcURL = this.url + '&' + paras; else srcURL = this.url + '?' + paras; this.sender.src = srcURL; } catch (E) { this.onError(e); } } }, defaultOnCompleteFunc : function (a) { }, defaultOnLoadingFunc : function () { }, defaultOnErrorFunc : function (error) { }, destroy : function () { this.onComplete = function(){}; delete AJAJ_CALLBACKS[this.id]; if(this.sender) document.getElementsByTagName("head")[0].removeChild(this.sender); this.sender = null; } } /* bind.js */ Function.prototype.bind = function(object) { var __method = this; return function() { return __method.apply(object, arguments); } } Function.prototype.bind2 = function(object) { var __method = this; var argu = Array.prototype.slice.call(arguments,1); return function() { return __method.apply(object, argu, arguments); } } /* * array.js */ Array.prototype.remove=function(dx) { if(isNaN(dx)||dx<0||dx>this.length){return false;} for(var i=0,n=0;i 0) obj.className = css['up'] || 'incolor'; if(delta == 0) obj.className = css['keep'] || 'nocolor'; if(delta < 0) obj.className = css['down'] || 'decolor'; } else if(typeof delta == 'string') { obj.className = delta; } } function timeStrGen(timeStr) { var retStr = ''; retStr += timeStr.substr(0, 2) + ':' + timeStr.substr(2, 2) + ':' + timeStr.substr(4, 2); return retStr; } function dateStrGen(dateStr) { var retStr = ''; retStr += dateStr.substr(0, 4) + '-' + dateStr.substr(4, 2) + '-' + dateStr.substr(6, 2); return retStr; } function getQueryString(queryStringName) { var returnValue=""; var URLString=new String(document.location); var serachLocation=-1; var queryStringLength=queryStringName.length; do { serachLocation=URLString.indexOf(queryStringName+"\="); if (serachLocation!=-1) { if ((URLString.charAt(serachLocation-1)=='?') || (URLString.charAt(serachLocation-1)=='&')) { URLString=URLString.substr(serachLocation); break; } URLString=URLString.substr(serachLocation+queryStringLength+1); } } while (serachLocation!=-1) if (serachLocation!=-1) { var seperatorLocation=URLString.indexOf("&"); if (seperatorLocation==-1) { returnValue=URLString.substr(queryStringLength+1); } else { returnValue=URLString.substring(queryStringLength+1,seperatorLocation); } } return returnValue; } function activeSet(el, htmlCode) { var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) { htmlCode = '
for IE
' + htmlCode; htmlCode = htmlCode.replace(/]*)>/gi, ''); el.innerHTML = null; el.innerHTML = htmlCode; el.removeChild(el.firstChild); } else { var el_next = el.nextSibling; var el_parent = el.parentNode; el_parent.removeChild(el); el.innerHTML = null; el.innerHTML = htmlCode; if (el_next) { el_parent.insertBefore(el, el_next) } else { el_parent.appendChild(el); } } } /* * cookie.js */ var iCookie = {}; iCookie.cookiename = "default"; iCookie.get=function(name){ name = name || iCookie.cookiename; var start=document.cookie.indexOf(name+"="); if(start==-1)return null; var len=start+name.length+1; if((!start)&&(name!=document.cookie.substring(0,name.length))){ return null; } var end=document.cookie.indexOf(";",len); if(end==-1)end=document.cookie.length; ckstr = document.cookie.substring(len,end); return (ckstr); }; iCookie.set=function(name,value){ name = name || iCookie.cookiename; var expires = "expires=Sun, 1 Jan 2036 00:00:00 UTC;"; //alert(document.domain); document.cookie=name+"="+(value)+";"+expires+"Path=/;Domain="+document.domain; //document.cookie=name+"="+(value)+";"+expires+"Path=/;Domain=.znz888.com"; }; /* * pingback.js */ pingback = {}; pingback.prefix = 'http://211.154.254.20/'; pingback.img=document.createElement('img'); pingback.pv = function(code, stype, starttime, onloadtime, inittime) { var page = new String(document.location); page = page.split('?')[0]; var pbURL = pingback.prefix + 'pv.gif?zuid=' + iCookie.get('ZUID'); pbURL += '&url=' + page; if(code && stype) { pbURL += '&stock=' + stype.toLowerCase() + code; } if(starttime && onloadtime && inittime) { pbURL += '&onloadtime=' + (onloadtime - starttime) + '&inittime=' + (inittime - onloadtime); } pbURL += '&rmd=' + Math.random().toString(); pingback.img.src = pbURL; } pingback.online = function() { var page = new String(document.location); page = page.split('?')[0]; if(page.indexOf('mod') > 0 || page.indexOf('ifeng') > 0 || page.indexOf('www.17fc.com') > 0 || page.indexOf('sortblock') > 0) return var pbURL = pingback.prefix + 'pv.gif?zuid=' + iCookie.get('ZUID'); pbURL += '&rmd=' + Math.random().toString(); pingback.img.src = pbURL; window.setTimeout(pingback.online, 10 * 1000); } //pingback.online(); /* * md5.js */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ /* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */ function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); } function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); } /* Backwards compatibility - same as hex_md5() */ function calcMD5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} /* * Perform a simple self-test to see if the VM is working */ function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; } /* * Calculate the MD5 of an array of little-endian words, and a bit length */ function core_md5(x, len) { /* append padding */ x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } /* * These functions implement the four basic operations the algorithm uses. */ function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } /* * Calculate the HMAC-MD5, of a key and some data */ function core_hmac_md5(key, data) { var bkey = str2binl(key); if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; } var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); return core_md5(opad.concat(hash), 512 + 128); } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); } /* * Convert a string to an array of little-endian words * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. */ function str2binl(str) { var bin = Array(); var mask = (1 << chrsz) - 1; for(var i = 0; i < str.length * chrsz; i += chrsz) bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); return bin; } /* * Convert an array of little-endian words to a hex string. */ function binl2hex(binarray) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str = ""; for(var i = 0; i < binarray.length * 4; i++) { str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); } return str; } /* * Convert an array of little-endian words to a base-64 string */ function binl2b64(binarray) { var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var str = ""; for(var i = 0; i < binarray.length * 4; i += 3) { var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); for(var j = 0; j < 4; j++) { if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); } } return str; } /* set $ instead of document.getElementbyID */ if ( typeof $ != "undefined" ) _$ = $; var $ = function (id){ return document.getElementById(id)||null; }; if(typeof $T != "undefined") _$T = $T; var $T = function(el, tag, c) { if(typeof el == 'string') el = $(el); if(c) { var childrens = el.childNodes; var ret = []; for(var i = 0; i < childrens.length; i ++) { var elTagName = childrens[i].tagName || ""; if(elTagName.toLowerCase() == tag) { ret.push(childrens[i]); } } return ret; } if(el && tag && el.getElementsByTagName) { return el.getElementsByTagName(tag.toString()); } return null; } /* * Number.js */ //*** This code is copyright 2004 by Gavin Kistner, gavin@refinery.com //*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt //*** Reuse or modification is free provided you abide by the terms of that license. //*** (Including the first two lines above in your source code mostly satisfies the conditions.) // Rounds a number to a specified number of decimals (optional) // Inserts the character of your choice as the thousands separator (optional) // Uses the character of your choice for the decimals separator (optional) // // It's not a highly optimized speed demon, but it gives the right result... // ...do you really care how speedy it is? :) // // !!Note!! IEWin gets (-0.007).format(2) WRONG, claiming that it's "0.00" // This is a bug in IEWin's Number.toFixed() function. Number.prototype.format=function(decimalPoints,thousandsSep,decimalSep){ var val=this+'',re=/^(-?)(\d+)/,x,y; if (decimalPoints!=null) val = this.toFixed(decimalPoints); if (thousandsSep && (x=re.exec(val))){ for (var a=x[2].split(''),i=a.length-3;i>0;i-=3) a.splice(i,0,thousandsSep); val=val.replace(re,x[1]+a.join('')); } if (decimalSep) val=val.replace(/\./,decimalSep); return val; } if (typeof Number.prototype.toFixed!='function' || (.9).toFixed()=='0' || (.007).toFixed(2)=='0.00') Number.prototype.toFixed=function(f){ if (isNaN(f*=1) || f<0 || f>20) f=0; var s='',x=this.valueOf(),m=''; if (this<0){ s='-'; x*=-1; } if (x>=Math.pow(10,21)) m=x.toString(); else{ m=Math.round(Math.pow(10,f)*x).toString(); if (f!=0){ var k=m.length; if (k<=f){ var z='00000000000000000000'.substring(0,f+1-k); m=z+m; k=f+1; } var a = m.substring(0,k-f); var b = m.substring(k-f); m = a+'.'+b; } } if (m=='0') s=''; return s+m; } /* stock index */ function isStockIndex(sCode, sType) { if (sType.toLowerCase() == 'sh' && sCode < "001000") return true; if (sType.toLowerCase() == 'sz' && (sCode.substr(0, 3) == '399' || sCode.substr(0, 3) == '395')) return true; return false; } // check browser type function getBrowser() { var OsObject = ""; if(navigator.userAgent.indexOf("MSIE")>0) { return "MSIE"; } if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){ return "Firefox"; } if(isSafari=navigator.userAgent.indexOf("Safari")>0) { return "Safari"; } if(isCamino=navigator.userAgent.indexOf("Camino")>0){ return "Camino"; } if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){ return "Gecko"; } } var znzBrowser = getBrowser(); //iframe height auto fit function ifrHeiAutoFit(iframeId) { var iframeObj = $(iframeId); if(!iframeObj || window.opera) return; // for firefox if(iframeObj.contentDocument) { var sMaxY = iframeObj.contentWindow.scrollMaxY ; var offHeight = iframeObj.contentDocument.body.offsetHeight; var eleHeight = iframeObj.contentDocument.documentElement.offsetHeight; iframeObj.height = Math.max(sMaxY, offHeight, eleHeight); } else if(iframeObj.Document && iframeObj.Document.body.scrollHeight)// for IE { iframeObj.height = iframeObj.Document.body.scrollHeight; } // bin onload events to iframe if(iframeObj.addEventListener) { iframeObj.addEventListener("load", resizeFrame, false); } else { iframeObj.attachEvent("onload", resizeFrame); } } function resizeFrame(evt) { evt = (evt) ? evt : window.event; var targetObj = (evt.target)? evt.target : evt.srcElement; // take care of W3C event processing from iframe's root document if(targetObj && targetObj.nodeType && targetObj.nodeType == 9) { if(evt.currentTarget && evt.currentTarget.tagName.toUpperCase() == "IFRAME") { targetObj = targetObj.currentTarget; } } if(targetObj) { ifrHeiAutoFit(targetObj.id); } } // caculate stock profit function stockProfitGet(stockCode, stockType, buyPrice, buyAmount, commisionPercent, currPrice) { var stockCost = stockCostGet(stockCode, stockType, buyPrice, buyAmount, commisionPercent); var totalCost = stockCost * buyAmount; var totalPrice = currPrice * buyAmount; var stockProfit = totalPrice - totalCost; return stockProfit; } function stockCostGet(stockCode, stockType, buyPrice, buyAmount, commisionPercent) { var totalPrice = buyPrice * buyAmount; var transferFee = 0; if ( stockType.toUpperCase() == 'SH') transferFee = (buyAmount * 0.001) < 1 ? 1 : (buyAmount * 0.001); var commision = (totalPrice * commisionPercent ) < 5 ? 5 : (totalPrice * commisionPercent ); var stampTax = totalPrice * 0.001; var stockCost = ( (transferFee + commision + stampTax ) / buyAmount ) + buyPrice; return stockCost; } function number_format( number, decimals, dec_point, thousands_sep ) { // http://kevin.vanzonneveld.net // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfix by: Michael White (http://getsprink.com) // + bugfix by: Benjamin Lupton // + bugfix by: Allan Jensen (http://www.winternet.no) // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) // + bugfix by: Howard Yeend // + revised by: Luke Smith (http://lucassmith.name) // + bugfix by: Diogo Resende // + bugfix by: Rival // % note 1: For 1000.55 result with precision 1 in FF/Opera is 1,000.5, but in IE is 1,000.6 // * example 1: number_format(1234.56); // * returns 1: '1,235' // * example 2: number_format(1234.56, 2, ',', ' '); // * returns 2: '1 234,56' // * example 3: number_format(1234.5678, 2, '.', ''); // * returns 3: '1234.57' // * example 4: number_format(67, 2, ',', '.'); // * returns 4: '67,00' // * example 5: number_format(1000); // * returns 5: '1,000' // * example 6: number_format(67.311, 2); // * returns 6: '67.31' var n = number, prec = decimals; n = !isFinite(+n) ? 0 : +n; prec = !isFinite(+prec) ? 0 : Math.abs(prec); var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep; var dec = (typeof dec_point == "undefined") ? '.' : dec_point; var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0; var abs = Math.abs(n).toFixed(prec); var _, i; if (abs >= 1000) { _ = abs.split(/\D/); i = _[0].length % 3 || 3; _[0] = s.slice(0,i + (n < 0)) + _[0].slice(i).replace(/(\d{3})/g, sep+'$1'); s = _.join(dec); } else { s = s.replace('.', dec); } return s; } // CollectGarbage function znzCollectGarbage() { if (znzBrowser != "MSIE") return; CollectGarbage(); window.setTimeout(znzCollectGarbage, 10* 1000); } znzCollectGarbage(); // check is hangqing time var hqTimeFlag = true; var hqTimeCallBacks = []; function inHqTime() { return hqTimeFlag; } function hqTimeCheck() { var args = { method : 'get', onComplete : function(rep){ dateStr = rep.responseText; var dt = dateStr.split(' '); if(dt[1] < '091000' || dt[1] > '152000') hqTimeFlag = false; else hqTimeFlag = true; var i = 0; var len = hqTimeCallBacks.length; for(i = 0; i < len; i ++) { if(typeof hqTimeCallBacks[i] == 'function') hqTimeCallBacks[i](dateStr); } } }; var infoURL = './time.php?rdm=' + Math.random().toString(); var myAjax = new Ajax(infoURL, args); window.setTimeout(hqTimeCheck, 60* 1000); } hqTimeCheck();