//17kstat beta 1.02 by code-life 2008.11.25 11:18 (email:cxh@17k.com)

var _stat_vid="VISITOR_CLIENT_NO_COOKIE_SUPPORT"; //客户端标识
var _stat_url=""; //网址
var _stat_tit=""; //标题
var _stat_ref=""; //来源
var _stat_res=""; //分辨率
var _stat_lag=""; //语言
var _stat_scd=""; //颜色质量
var _stat_stm=0; //停留时间
var _stat_urv=0; //访问时间
var _stat_stm=0; //停留时间
var _stat_brw=0; //浏览器类型
var _stat_os=0; //操作系统
var _stat_flsh=""; //flash版本

//初始化参数
if(typeof(_stat_owLoadNum) =="undefined" || typeof(_stat_maxLoadNum) =="undefined")
{
    var _stat_owLoadNum = 0; //此脚本当前装载次数
	var _stat_maxLoadNum = 1; //此脚本当前最大装载次数
}

var _stat_domain_array = ['localhost.cn','localhost.com.cn','localhost.com','17k.com','chineseall.com']; //允许执行此脚本的域名列表
var _stat_src_addr = "http://log.17k.com"; //此脚本存放域名地址
var _stat_com_default = "17k.com"; //默认来源自己站点
var _stat_cdmn = stat_get_domain(document.location.toString()); //取得当前域名
var _stat_com_expires = 2; //来源存放日期，单位：天
var _stat_history_length = 10; //访问历史记录存放条数

//空函数
function _stat_void()
{
	return ;	
}

//判断是否执行函数
function allowExec()
{
	try{
		if(window.frameElement)
			return false;
		else
		{
			if(_stat_owLoadNum < _stat_maxLoadNum)
			{ 
				_stat_owLoadNum ++;
				return true;
			}
			else
				return false;
		}
	}
	catch(e) {return false;}
}

//主函数
function statTracker()
{
	_stat_tit=escape(document.title);
	_stat_url=escape(document.location);
	_stat_ref=escape(document.referrer);
	_stat_flsh=stat_get_flashver();
	var d=new Date();
	var now=d.getTime();
	var _stat_cookie_enabled;
	document.cookie="__stat__test__cookies."+now;
	_stat_cookie_enabled=(document.cookie.indexOf("__stat__test__cookies."+now)!=-1)?true:false; //判断客户端是否允许执行cookie
	if(_stat_url.indexOf("http")!=0)return ;
	var run_flag=1;	
	//暂时取消域名限制
	//for(i=0;i<_stat_domain_array.length;i++)
	//{
	//	if(_stat_cdmn==_stat_domain_array[i])
	//	{
	//		run_flag=1;
	//		break;
	//	}
	//}

	if(run_flag==1 && allowExec())
	{
		//用户标识 例：_stat_nid=f79e3f6a0e3709b21b52d677ee1bfdfe,0
		var _ck_str=stat_get_cookie("_stat_nid");
		if(_ck_str==-1)
		{
			if(_stat_cookie_enabled)
			{
				_stat_vid=fetch_visitor_hash();
				stat_set_cookie_long("_stat_nid",_stat_vid+","+_stat_urv);
			}
		}
		else 
		{
			var _id_pos=_ck_str.indexOf(",");
			_stat_vid=_ck_str.substr(0,_id_pos);
			_stat_urv=_ck_str.substr(_id_pos+1,999);
			if(_stat_urv!=0&&(now-_stat_urv)>365*86400)
			{
				_stat_urv=0;
				stat_set_cookie_long("_stat_nid",_stat_vid+","+_stat_urv);				
			}
		}

		//来源地址 例：_stat_com=www.17k.com
		var _stat_com=stat_get_cookie("_stat_com");
		if(_stat_com==-1)
		{
			_stat_com = stat_get_provider(unescape(_stat_url));

			if(_stat_com==""){
				if(_stat_ref==""||_stat_ref=="undefined")
				{
					_stat_com = stat_get_domain_name(unescape(_stat_url));
				}
				else
				{
					_stat_com = stat_get_domain_name(unescape(_stat_ref));
				}
			}

			if(_stat_cookie_enabled)
			{
				var expires=1000*60*60*24*_stat_com_expires;
				stat_set_cookie_new("_stat_com",_stat_com,expires);
			}
		}

		//访问地址 例：_stat_vst=1219739073375,|http%3A//www.17k.com|,www.17k.com
		var _stat_vst=stat_get_cookie("_stat_vst");
		var _stat_fnd=-1;
		if(_stat_vst==-1)
		{
			stat_set_cookie("_stat_vst",now+",|"+_stat_url+"|"+","+_stat_com);			
		}
		else 
		{
			var _stat_vst_array=_stat_vst.split(",");
			_stat_stm=(now-parseInt(_stat_vst_array[0]))/1000;
			_stat_vst_array[1]=stat_visit_log(_stat_vst_array[1],_stat_url);
			_stat_vst=now+","+_stat_vst_array[1]+","+_stat_com;
			stat_set_cookie("_stat_vst",_stat_vst);
		}

		stat_get_navigation_info();
		var _stat_q="_vid="+_stat_vid;
		//_stat_q+="&_tit="+_stat_tit;
		//_stat_q+="&_url="+_stat_url;
		_stat_q+="&_ref="+_stat_ref;
		_stat_q+="&_stm="+_stat_stm;
		_stat_q+="&_res="+_stat_res;
		//_stat_q+="&_scd="+_stat_scd;
		//_stat_q+="&_lag="+_stat_lag;
		_stat_q+="&_brw="+_stat_brw;
		_stat_q+="&_os="+_stat_os;
		//_stat_q+="&_flsh="+_stat_flsh;
		_stat_q+="&_end1";

		var _img=new Image();
		_img.src=_stat_src_addr+"/17kstat.gif?"+_stat_q;
		_img.onload=function ()
		{
			_stat_void();			
		};
	}
}

function stat_get_navigation_info()
{
	_stat_res="-";
	_stat_scd="-";
	_stat_lag="-";
	_stat_os=0;
	_stat_brw=0;

	if(self.screen)
	{
		_stat_res=screen.width+"x"+screen.height;
		_stat_scd=screen.colorDepth+"-bit";
		
	}
	else if(self.java)
	{
		var j=java.awt.Toolkit.getDefaultToolkit();
		var s=j.getScreenSize();
		_stat_res=s.width+"x"+s.height;		
	}
	if(navigator.language)
	{
		_stat_lag=escape(navigator.language.toLowerCase());		
	}
	else if(navigator.browserLanguage)
	{
		_stat_lag=escape(navigator.browserLanguage.toLowerCase());		
	}

	var userAgent=navigator.userAgent.toLowerCase().replace(/\s*/g, "");

	//firefox browse
	if(userAgent.indexOf("firefox")>-1) _stat_brw=20; //FireFox
	//opera browse
	else if(userAgent.indexOf("opera")>-1) _stat_brw=30; //Opera
	//other browse
	else if(userAgent.indexOf("tencenttraveler")>-1&&userAgent.indexOf("maxthon")==-1) _stat_brw=51; //TencentTraveler
	else if(userAgent.indexOf("tencenttraveler")>-1&&userAgent.indexOf("maxthon")>-1) _stat_brw=52; //Maxthon
	else if(userAgent.indexOf("safari")>-1) _stat_brw=53; //Safari
	else if(userAgent.indexOf("camino")>-1) _stat_brw=54; //Camino
	else if(userAgent.indexOf("gecko")>-1) _stat_brw=55; //Gecko
	else if(userAgent.indexOf("webkit")>-1) _stat_brw=56; //Webkit
	//ie browse
	else if(userAgent.indexOf("msie7")>-1) _stat_brw=17; //IE7
	else if(userAgent.indexOf("msie6")>-1) _stat_brw=16; //IE6
	else if(userAgent.indexOf("msie5")>-1) _stat_brw=15; //IE6

	//window os
    if(userAgent.indexOf("nt5.3")>-1) _stat_os=12; //Microsoft Windows Vista
    else if(userAgent.indexOf("nt5.2")>-1) _stat_os=14; //Microsoft Windows 2003
    else if(userAgent.indexOf("nt5.1")>-1) _stat_os=11; //Microsoft Windows XP
    else if(userAgent.indexOf("nt5")>-1) _stat_os=13; //Microsoft Windows 2000
    else if(userAgent.indexOf("nt4")>-1) _stat_os=15; //Microsoft Windows NT4
    else if(userAgent.indexOf("98")>-1) _stat_os=16; //Microsoft Windows 98
    else if(userAgent.indexOf("win9x4.90")>-1) _stat_os=17; //Microsoft Windows ME
    else if(userAgent.indexOf("95")>-1) _stat_os=18; //Microsoft Windows 95
	//linux or unix
    else if(userAgent.indexOf("'linux'")>-1) _stat_os=31; //Linux
    else if(userAgent.indexOf("'unix'")>-1) _stat_os=32; //Unix
    else if(userAgent.indexOf("'freebsd'")>-1) _stat_os=33; //FreeBSD
	// other os
    else if(userAgent.indexOf("powerpc")>-1) _stat_os=51; //PowerPC
    else if(userAgent.indexOf("mac")>-1&&userAgent.indexOf("pc")>-1) _stat_os=52; //Mac OS
    else if(userAgent.indexOf("sun")>-1&&userAgent.indexOf("os")>-1) _stat_os=53; //Sun OS
	else if(userAgent.indexOf("teleport")>-1) _stat_os=55; //Teleport Pro
	else if(userAgent.indexOf("flashget")>-1) _stat_os=56; //FlashGet
	else if(userAgent.indexOf("webzip")>-1) _stat_os=57; //WebZip
}

//生成用户标识
function fetch_visitor_hash()
{
	var d=new Date();
	var xy=document.body.clientWidth+":"+document.body.clientHeight;
	var s=str_to_ent(d.getTime()+Math.random()+document.location+document.referrer+screen.width+screen.height+navigator.userAgent+document.cookie+xy);
	return stat_hex_md5(s);	
}

//判断是否为合作商来源
function stat_get_provider(curr_location)
{
	curr_location = curr_location.toLowerCase();

	//特殊页面判断
	var pattern=/index0430.*html$/g;
	if(pattern.test(curr_location))
	{
		return "index0430";
	}

	//合作方判断
	var pattern=/_provider=.+/g;
	if(pattern.test(curr_location))
	{
		try{
			return(curr_location.match("_provider=(.+)")[1]);
		}catch(e){}
	}

	return "";
}

//获取当前访问地址
function stat_get_domain_name(curr_location)
{
	curr_location=curr_location.substr(7);
	var pos_port=curr_location.indexOf(":");
	var pos_bias=curr_location.indexOf("/");

	if(pos_bias==-1)
	{
		pos_bias=curr_location.length;
	}

	var pos_domain_end;
	if(pos_port==-1||pos_port>pos_bias)
	{
		pos_domain_end=pos_bias;
	}
	else
	{
		pos_domain_end=pos_port;
	}

	var domain_name=curr_location.substr(0,pos_domain_end);
	return domain_name;
}

//获取当前访问域名
function stat_get_domain(curr_location)
{
	curr_location=curr_location.substr(7);
	var pos_port=curr_location.indexOf(":");
	var pos_bias=curr_location.indexOf("/");

	if(pos_bias==-1)
	{
		pos_bias=curr_location.length;
	}

	var pos_domain_end;
	if(pos_port==-1||pos_port>pos_bias)
	{
		pos_domain_end=pos_bias;
	}
	else
	{
		pos_domain_end=pos_port;
	}

	var domain_name=curr_location.substr(0,pos_domain_end);
	var arr_domain_name=domain_name.split(".");
	var domain_name_length=arr_domain_name.length;
	var pattern=/^\d+$/g;
	if(pattern.test(arr_domain_name[domain_name_length-1]))
	{
		return domain_name;
	}
	if(arr_domain_name.length<3)
	{
		return domain_name;
	}

	var domain_suffixes=['com','net','org','gov','co'];
	var i,suffix_found=false;
	for(i=0;i<domain_suffixes.length;i++)
	{
		if(arr_domain_name[domain_name_length-2]==domain_suffixes[i])
		{
			suffix_found=true;
			break;
		}
	}
	if(!suffix_found)
	{
		return arr_domain_name[domain_name_length-2]+"."+arr_domain_name[domain_name_length-1];	
	}
	else
	{
		return arr_domain_name[domain_name_length-3]+"."+arr_domain_name[domain_name_length-2]+"."+arr_domain_name[domain_name_length-1];
	}
}

function stat_set_cookie_long(name,value)
{
	var _stat_epd=new Date();
	_stat_epd.setTime(_stat_epd.getTime()+1000*60*60*24*365*100);
	document.cookie=name+"="+value+"; expires="+_stat_epd.toGMTString()+"; path=/; domain="+_stat_cdmn;	
}

function stat_set_cookie(name,value)
{
	var _stat_epd=new Date();
	_stat_epd.setTime(_stat_epd.getTime()+0);
	document.cookie=name+"="+value+"; path=/; domain="+_stat_cdmn;	
}

function stat_set_cookie_new(name,value,expires)
{
	if(!expires||expires=="")
	{
		expires=1000*60*60*24*365*1;		
	}

	var _stat_epd=new Date();
	_stat_epd.setTime(_stat_epd.getTime()+expires);
	document.cookie=name+"="+value+"; expires="+_stat_epd.toGMTString()+"; path=/; domain="+_stat_cdmn;	
}

function stat_get_cookie(name)
{
	var _stat_dc=document.cookie;
	var _stat_cname=name+"=";
	var _stat_clen=_stat_dc.length;
	var _stat_cbegin=0;
	while(_stat_cbegin<_stat_clen)
	{
		var _stat_vbegin=_stat_cbegin+_stat_cname.length;
		if(_stat_dc.substring(_stat_cbegin,_stat_vbegin)==_stat_cname)
		{
			var _stat_vend=_stat_dc.indexOf(";",_stat_vbegin);
			if(_stat_vend==-1)_stat_vend=_stat_clen;
			return unescape(_stat_dc.substring(_stat_vbegin,_stat_vend));			
		}
		_stat_cbegin=_stat_dc.indexOf(" ",_stat_cbegin)+1;
		if(_stat_cbegin==0)break;
		
	}return -1;	
}

function stat_get_flashver()
{
	var f="",n=navigator;
	if(n.plugins&&n.plugins.length)
	{
		for(var ii=0;ii<n.plugins.length;ii++)
		{
			if(n.plugins[ii].name.indexOf('Shockwave Flash')!=-1)
			{
				f=n.plugins[ii].description.split('Shockwave Flash ')[1];
				break;				
			}
		}
	}
	else if(window.ActiveXObject)
	{
		for(var ii=10;ii>=2;ii--)
		{
			try
			{
				var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
				if(fl)
				{
					f=ii+'.0';
					break;					
				}
			}
			catch(e)
			{
				
			}
		}
	}
	return f;	
}

var _stat_hexcase=0;
var _stat_chrsz=8;
function stat_hex_md5(s)
{
	return binl2hex(stat_core_md5(str2binl(s),s.length*_stat_chrsz));	
}

function stat_core_md5(x,len)
{
	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);	
}

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);	
}

function safe_add(x,y)
{
	var lsw=(x&0xFFFF)+(y&0xFFFF);
	var msw=(x>>16)+(y>>16)+(lsw>>16);
	return (msw<<16)|(lsw&0xFFFF);	
}

function bit_rol(num,cnt)
{
	return (num<<cnt)|(num>>>(32-cnt));}

function str2binl(str)
{
	var bin=new Array();
	var mask=(1<<_stat_chrsz)-1;
	for(var i=0;i<str.length*_stat_chrsz;i+=_stat_chrsz)bin[i>>5]|=(str.charCodeAt(i/_stat_chrsz)&mask)<<(i%32);return bin;
}

function binl2hex(binarray)
{
	var hex_tab=_stat_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;	
}

function str_to_ent(str)
{
	var result='';
	var i;
	for(i=0;i<str.length;i++)
	{
		var c=str.charCodeAt(i);
		var tmp='';
		if(c>255)
		{
			while(c>=1)
			{
				tmp="0123456789".charAt(c%10)+tmp;
				c=c/10;				
			}
			if(tmp=='')
			{
				tmp="0";				
			}
			tmp="#"+tmp;
			tmp="&"+tmp;
			tmp=tmp+";";
			result+=tmp;			
		}
		else 
		{
			result+=str.charAt(i);
		}
	}return result;
}

// 删除字符串前后空格
String.prototype.trim = function()
{
	return this.replace(/(^\s*)|(\s*$)/g, "");
}

// 增加访问记录，只保留最后三条。
function stat_visit_log(_visit_url,_curr_url)
{
	var _stat_tmp_array=new Array();
	var _stat_tmp_find=-1;
	var _stat_sit_array=_visit_url.split("|");
	for(i=0;i<_stat_sit_array.length;i++)
	{
		if(_stat_sit_array[i]!="")
		{
			var _stat_sit=escape(_stat_sit_array[i]);
			_stat_tmp_array.push(_stat_sit);
			if(_stat_sit==_curr_url) _stat_tmp_find=i;
		}
	}
	if((_stat_ref==""||_stat_ref=="undefined")&&_stat_tmp_array.length>0) _stat_ref=_stat_tmp_array[_stat_tmp_array.length-1];
	if(_stat_tmp_find==-1) _stat_tmp_array.push(_curr_url);
	while(_stat_tmp_array.length>_stat_history_length) _stat_tmp_array.shift();
	var _stat_tmp_visit_url="|";
	for(i=0;i<_stat_tmp_array.length;i++)
	{
		_stat_tmp_visit_url+=_stat_tmp_array[i]+"|";
	}
	return _stat_tmp_visit_url;
}

//调用主函数
statTracker();
