
/*
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<this.length;i++)
    {
        if(this[i]!=this[dx])
        {
            this[n++]=this[i]
        }
    }
    this.length-=1
}

Array.prototype.indexOf=function(v, nostrict){
    for(var i=0;i<this.length;i++){
        if(this[i]===v){
            return i;
        }
        if(nostrict&&(this[i]==v)){
            return i;
        }        
    }
    return -1;
}
Array.prototype.clone = function() {
  var newObj = (this instanceof Array) ? [] : {};
  for (i in this) {
    if (i == 'clone') continue;
    if (this[i] && typeof this[i] == "object") {
      newObj[i] = this[i].clone();
    } else newObj[i] = this[i]
  } return newObj;
};

/*
znzlib.js
*/
function innerSet(obj, str, delta, css)
{
    if (typeof obj == "string")
        obj = $(obj);

    if(!obj)
        return;
    css = css || {};
    obj.innerHTML = null;
    obj.innerHTML = str;
    if (typeof delta != "undefined" && delta != null && typeof delta != 'string')
    {
        obj.className = null;
        if(delta > 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 = '<div style="display:none">for IE</div>' + htmlCode;
        htmlCode = htmlCode.replace(/<script([^>]*)>/gi,
        '<script$1 defer>');
        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, d){
    name = name || iCookie.cookiename;
    var expires = "expires=Sun, 1 Jan 2036 00:00:00 UTC;";
    //alert(document.domain);
    d = d || document.domain;
    document.cookie=name+"="+(value)+";"+expires+"Path=/;Domain=" + d;   
    //document.cookie=name+"="+(value)+";"+expires+"Path=/;Domain=.znz888.com";
}; 


//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 && childrens[i].parentNode == el)
            {
                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();
