﻿// JScript 文件

//*************************************** 

// 
// 填补 ie 5.0的 Array.splice 函数 
// 
if(new Array().splice == null) 
{ 
/// usage: array.splice(startPos,deleteCount,[item1,item2,...]);for ie5.0 
Array.prototype.splice = function() 
{ 
if(arguments.length < 2 || arguments[1] < 0) 
return new Array(); 

var endPoint1 = arguments[0]; 
if(endPoint1 < 0 && Math.abs(endPoint1) > this.length) 
endPoint1 = 0; 

var startPoint2 = (endPoint1 < 0)? (this.length + endPoint1 + arguments[1]) : (endPoint1 + arguments[1]); 

var bArray = this.slice(0,endPoint1); 
var dArray = this.slice(endPoint1,startPoint2); 
var eArray = this.slice(startPoint2); 
var nArray = new Array(); 
for(var i = 2, al = arguments.length; i < al; i++) 
{ 
nArray.push(arguments[i]); 
} 
var fArray = bArray.concat(nArray,eArray); 

for(var i = 0, al = fArray.length; i < al; i++) 
{ 
this[i] = fArray[i]; 
} 
this.length = fArray.length; 

return dArray; 
} 
} 

// 
// NameValueCollection 类 
// 
function NameValueCollection() 
{ 
this.__keys = new Array(); 
this.__values = new Object(); 

this.__checkArg = function() 
{ 
for(var i = 0, j = arguments.length; i < j; i++) 
{ 
if(typeof arguments[i] != "string") 
return false; 
} 
return true; 
} 

// 
// 返回包含当前实例的所有键的字符数组 
// 
this.allKeys = function() 
{ 
return this.__keys.concat(); 
} 


// 
// 获取与 NameValueCollection 中的指定键关联的值(字符数组)。 
// 
this.getValues = function(name) 
{ 
if(!this.__checkArg(name)) 
{ 
throw new Error("Invalid type on NameValueCollection.getValues's argument."); 
} 

var values = this.__values[name.toLowerCase()]; 

return (values instanceof Array)? values : null; 
} 

// 
// 将具有指定名称和值的项添加到 NameValueCollection。 
// 
this.add = function(name, value) 
{ 
if(!this.__checkArg(name, value)) 
{ 
throw new Error("Invalid type on NameValueCollection.add's argument"); 
} 

var key = name.toLowerCase(); 

if(this.__values[key] == null) 
{ 
this.__keys[this.__keys.length] = name; 
this.__values[key] = new Array(value); 
} 
else 
{ 
this.__values[key][this.__values[key].length] = value; 
} 
} 

// 
// 获取与 NameValueCollection 中的指定键关联的值， 
// 如果对应多个值，以逗号分割，参考getValues。 
// 
this.get = function(name) 
{ 
if(!this.__checkArg(name)) 
{ 
throw new Error("Invalid type on NameValueCollection.get's argument"); 
} 

var value = this.__values[name.toLowerCase()]; 

return (value instanceof Array)? value.join(",") : null; 
} 

// 
// 设置或改变(该项不为空)NameValueCollection 中某个项的值。 
// 
this.set = function(name, value) 
{ 
if(!this.__checkArg(name, value)) 
{ 
throw new Error("Invalid type on NameValueCollection.set's argument"); 
} 

var key = name.toLowerCase(); 

if(this.__values[key] == null) 
{ 
this.__keys[this.__keys.length] = name; 
} 

this.__values[key] = new Array(value); 
} 

this.hasKeys = function() 
{ 
return this.__keys.length > 0; 
} 
// 
// 清空NameValueCollection的所有键值。 
// 
this.clear = function() 
{ 
this.__keys = new Array(); 
this.__values = new Object(); 
} 

// 
// 将具有指定键的项从当前实例中删除。 
// 
this.remove = function(name) 
{ 
if(!this.__checkArg(name)) 
{ 
throw new Error("Invalid type on NameValueCollection.remove's argument"); 
} 

var key = name.toLowerCase(); 

if(this.__values[key] == null) 
return; 

for(var i = 0, j = this.__keys.length; i < j; i++) 
{ 
if(this.__keys[i] == key) 
{ 
this.__keys.splice(i, 1); 
this.__values[key] = null; 
return; 
} 
} 
} 
} 
// 
// 类HttpCookie 
// 
function HttpCookie(name) 
{ 
// 
// 私有属性 
// 
this.__name; 
this.__isExisted; 
this.__expires; 
this.__value; 
this.__path; 

// 
// 公有属性:values; 类型:JScript.Collections.NameValueCollection; 
// 
this.values; 

// 
// 判定当前的 HttpCookie 实例是否存在。 
// 
this.isExisted = function() 
{ 
return this.__isExisted; 
} 

// 
// 判断当前的cookie是否具有子键。 
// 
this.hasKeys = function() 
{ 
return this.values.hasKeys(); 
} 

// 
// 私有方法,分析cookie串 
// 
this.__analysisCooString = function(cstring) 
{ 
var subCookies = cstring.split("&"); 

for(var k = 0, l = subCookies.length; k < l; k++) 
{ 
var key, values, splitPos; 

splitPos = subCookies[k].indexOf("="); 

if(splitPos != -1) 
{ 
key = subCookies[k].substring(0, splitPos); 
values = subCookies[k].substring(splitPos + 1); 
values = values.split(","); 

//插入键值 
for(var m = 0, n = values.length; m < n; m++) 

this.values.add(key, values[m]); 
} 
else 
{ 
this.__value = subCookies[k]; 
} 
} 
} 

// 
// 私有方法，初始化 cookie 。 
// 如果以参数 name 为名字的cookie存在，则导入该cookie； 
// 调用isExisted 方法则返回真，否则初始化一个新实例；调用 
// isExisted()返回 false。 
// 
this.__init = function(name) 
{ 
if(typeof name != "string") 
throw new Error("Invalid type on HttpCookie's argument"); 

this.__name = (name != null)? name : ""; 
this.__value = ""; 
this.__isExisted = false; 
this.__expires = null; 
this.__path = "/"; 
this.values = new NameValueCollection(); 
this.__domain="";


var cookies = document.cookie.split("; "); 

for(var i = 0, j = cookies.length; i < j; i++) 
{ 
var name, value, splitPos; 

splitPos = cookies[i].indexOf("="); 

if(splitPos != -1) 
{ 
name = cookies[i].substring(0, splitPos); 
value = cookies[i].substring(splitPos + 1); 
} 
else 
{ 
name = cookies[i]; 
} 

if(this.__name.toLowerCase() == name.toLowerCase()) 
{ 
this.__isExisted = true; 

if(value == null) return; 

this.__analysisCooString(value); 

break; 
} 
} 
} 

// 
// 返回当前HttpCookie实例的名字。 
// 
this.getName = function() 
{ 
return this.__name; 
} 

// 
// 设定当前 HttpCookie 实例的值 
// 
this.setValue = function(value) 
{ 
if(value != null) 
{ 
this.__value = value.toString(); 
this.values = new NameValueCollection(); 
} 
} 

// 
// 返回 当前 HttpCookie 实例的值 
// 
this.getValue = function() 
{ 
var value = new String(); 

if(this.values.hasKeys()) 
{ 
var keys = this.values.allKeys(); 

for(var i = 0, j = keys.length; i < j; i++) 
{ 
value += "&" + keys[i] + "=" + this.values.get(keys[i]); 
} 
} 

return this.__value + ((this.__value == "")? value.substring(1) : value); 

} 



// 
// 设定当前 HttpCookie 实例的过期时间；以秒为单位 
// 当该方法未被调用时，实例默认跟随窗体存活期。 
// 
this.setExpires = function(secs) 
{ 
if(typeof secs == "number") 
{ 
var sysExpiresTime = new Date().getTime() + parseInt(secs) *60*1000 ;

this.__expires = new Date(sysExpiresTime).toGMTString(); 
} 
} 

// 
// 设定当前 HttpCookie 实例的的有效跟目录。 
// 
this.setPath = function(path) 
{ 
if(path != null) 
this.__path = path.toString(); 
} 

// 
// 设定当前 domain。 
// 
this.setdoMain = function(domain) 
{ 
if(domain != null) 
this.__domain = domain.toString(); 
} 


// 
// 将当前的HttpCookie实例配置写入 cookie。 
// 
this.save = function() 
{ 
document.cookie = this.__name + "=" + this.getValue() + ";" + 
((this.__expires != null)? "expires=" + this.__expires + ";" : "") + 
"path=" + this.__path ; 

} 
//初始化 
this.__init(name); 
}

