function Cookie(document, name, days, path, domain, secure) {
/* The constructor function: creates a cookie object for this document,
with a specified name and optional attributes.  From "JavaScript",
O'Reily, 1998, example 18-1.
Arguments:
  document: Required Document object value.
  name:     Required string for the name of the cookie.
  days:     Optional number that specifies the days from now
            that the cookie should expire.
  path:     Optional string that specifies the cookie path attribute.
  domain:   Optional string that specifies the cookie domain attribute.
  secure:   Optional Boolean value, if true, requests a secure cookie.

All the predefined properties of this object begin with '$'
to distinguish them from other properties which are the values to
be stored in the cookie.
*/
  this.$document = document;
  this.$name = name;
  if (days)
    this.$expiration = 
      new Date((new Date()).getTime() + days * 86400000);
  else this.$expiration = null;
  if (path)   this.$path   = path;   else this.$path   = null;
  if (domain) this.$domain = domain; else this.$domain = null;
  if (secure) this.$secure = true;   else this.$secure = false;
}

function _Cookie_store() {  // store method of cookie object
/* First, loop through the properties of the Cookie object and
put together the value of the cookie. Since cookies use the
equals sign and semicolons as separators, we'll use colons
and ampersands for the individual state variables we store 
within a single cookie object. Note that we escape the value
of each state variable, in case it contains punctuation or other
illegal characters.
*/
var cookieval = "";  // clear actual cookie value
  for(var prop in this) {  // Ignore "$" properties, and methods
    if ((prop.charAt(0) == '$') || 
        ((typeof this[prop]) == 'function')) 
        continue;
    if (cookieval != "") cookieval += '&';
    cookieval += prop + ':' + escape(this[prop]);
  }

/* Now that we have the value of the cookie, put together the 
complete cookie string, which includes the name and the various
attributes specified when the Cookie object was created. 
*/
var cookie = this.$name + '=' + cookieval;
  if (this.$expiration)
      cookie += '; expires=' + this.$expiration.toGMTString();
  if (this.$path) cookie += '; path=' + this.$path;
  if (this.$domain) cookie += '; domain=' + this.$domain;
  if (this.$secure) cookie += '; secure';

  this.$document.cookie = cookie;  // store with magic property
}

function _Cookie_load() {  // cookie load function
/* get a list of all cookies that pertain to this document.
We do this by reading the magic Document.cookie property. 
*/
var allcookies = this.$document.cookie;
  if (allcookies == "") return false;

  // Now extract just the named cookie from that list.
  var start = allcookies.indexOf(this.$name + '=');
  if (start == -1) return false;   // Cookie not defined for this page.
  start += this.$name.length + 1;  // Skip name and equals sign.
  var end = allcookies.indexOf(';', start);
  if (end == -1) end = allcookies.length;
  var cookieval = allcookies.substring(start, end);

/* Now that we've extracted the value of the named cookie, we've
got to break that value down into individual state variable 
names and values. The name/value pairs are separated from each
other by ampersands, and the individual names and values are
separated from each other by colons. We use the split method
to parse everything.
*/
var a = cookieval.split('&');      // array of name/value pairs.
  for(var i=0; i < a.length; i++)  // Break each pair into an array.
      a[i] = a[i].split(':');

/* Now that we've parsed the cookie value, set all the names and values
of the state variables in this Cookie object. Note that we unescape()
the property value, because we called escape() when we stored it.
*/
  for(var i = 0; i < a.length; i++) {
    this[a[i][0]] = unescape(a[i][1]);
  }

  // We're done, so return the success code.
  return true;
}

function _Cookie_remove() {  // the remove method
var cookie;
  cookie = this.$name + '=';
  if (this.$path) cookie += '; path=' + this.$path;
  if (this.$domain) cookie += '; domain=' + this.$domain;
  cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';

  this.$document.cookie = cookie;  // magic store
}

Cookie.prototype.store  = _Cookie_store;  // load proto methods
Cookie.prototype.load   = _Cookie_load;
Cookie.prototype.remove = _Cookie_remove;

/* Create the cookie we'll use to save state for this web page.
Since we're using the default path, this cookie will be accessible
to all web pages in the same directory as this file or "below" it.
Therefore, it should have a name that is unique among those pages.
Note that we set the expiration to 10 days in the future. 
*/

function CookieList(prefix)
{
	var _prefix = prefix;
	var _historys = new Array();
	var _capacity = 6;
	this.add = function(key,imgUrl,name,url,category,categoryUrl){
		init();
		for(var i = 0;i<_historys.length;i++){
			if(_historys[i].key == key)
				return;
		}
		if(_historys.length >= _capacity)
		{
			_historys[0].remove();
			_historys.splice(0,1);
			for(var i = 0; i < _historys.length;i++){
				_historys[i].$name = _prefix + i;
				_historys[i].store();
			}
		}
		var cke = new Cookie(document, _prefix + _historys.length, 365, "/");
		cke.key = key;
		cke.imgUrl = imgUrl == '' ? 'http://img.39.net/db/jbk/disease_default_small_res.gif' : imgUrl;
		cke.name = name;
		cke.url = url;
		if(categoryUrl != null){
			cke.category = category;
			cke.categoryUrl = categoryUrl;
		}
		else{
			var reg = /<a\shref="([^"]+)">([^<]+)<\/a>/ig;
			reg.exec(category);
			cke.category = RegExp.$2;
			cke.categoryUrl = RegExp.$1;
		}
		cke.store();
		_historys.push(cke);
	}
	this.read = function(){
		init();
		var arr = new Array();
		for(var i = _historys.length-1; i>=0; i--)
			arr.push(_historys[i]);
		return arr;
	}
	this.removeAll = function(){
		init();
		for(var i = 0;i<_historys.length;i++){
			_historys[i].remove();
		}
	}
	function init(){
		_historys.length = 0;
		for(var i = 0;i<_capacity;i++){
			var cke = new Cookie(document, _prefix+i, 10, "/");
			if(!cke.load()) break;
			_historys.push(cke);
		}
	}
	
//    function getHost(){
//	    var href = window.location.href;
//	    var reg = new RegExp("http://(\\w+)\\.39\\.net","ig");
//	    reg.exec(href);
//	    return RegExp.$1;
//    }
	
	function getHost(){
		var href = window.location.href;
		//var reg = new RegExp("http://(\\w+)\\.39\\.net","ig");
		var reg = new RegExp("http://(\\w+.?\\w*)\\.39\\.net","ig");
		if(reg.exec(href)!=null)
		    return RegExp.$1+".";              
		else
		    return "";
	}
	
	function getHost2()
	{
	    var local_host=window.location.host;
        var local_domain="";
        var temp_host = local_host.split(".");
        if(temp_host.length<2)
        {
	        local_domain='39.net';
        }
        else
        {
	        local_domain=temp_host[temp_host.length-2]+'.'+temp_host[temp_host.length-1];
        }
        if(local_domain=="com.cn" || local_domain=="net.cn" || local_domain=="org.cn")
        {
            local_domain=temp_host[temp_host.length-3]+"."+temp_host[temp_host.length-2]+"."+temp_host[temp_host.length-1];
        }
        
        return local_domain;
	}
}

// 在前台显示访问历史
function showHistory(objs){
	for(var i = 0;i<objs.length;i++){
		var obj = objs[i];
		document.write("<li><p><a href=\""+obj.url+"\">"+obj.name+"</a></p></li>");
	}
}