// JavaScript Document

//	Document with a specified name and optional attributes.
//	Arguments:
//		document: 	The document object for which the cookie is stored. Required.
//		name:		A string that specifies a name for the cookie.
//		hours:		An optional number that specifies the number of hours from now
//					after which the cookie should expire
//		path:		An optional string that specifies the cookie path attribute
//		domain:		An optional string that specifies the cookie domain attribute
//		secure:		An opional boolean value that, if true, requests a secure cookie.
function Cookie(document, name, hours, path, domain, secure)
{
		//All the predefiened properties of this object begin with '$'
		//to distinguish them form other properties, which are the values to
		//be stored in the cookie
		this.$document = document;
		this.$name = name;
		if(hours)
			this.$expiration = new Date((new Date()).getTime() + hours*3600000);
		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 false;
}

//This function is the store() method of the Cookie object

Cookie.prototype.store = function() {
		//First look through the properties of the cookie object and
		//Put together the values of the cookie. Since cookies use the equals sign and semicolons as seperators, well use colons
		//and amersands for hte individual state variables we store
		//within a single cookie value. Note that we escape the value of each state variable, in case it contains punctiontion or other
		//illegal chars.
		var cookieval = "";
		for(var prop in this){
				//Ignore properties with the names that begin with '$' and also 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 string which includes the anem and the various
		//Atrributes 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';
		// Now store the cookie by setting the magic Document.cook9ie property
		
		this.$document.cookie = cookie;
}

//This function is hte load() method of hte cookie object
Cookie.prototype.load = function(){
	//First, get a list of all cookies that pertain to this document
	//we do thuis 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; // No cookie designated 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
	//Must break that value down into individual state variable
	//Names and values. The na,e/value pairs are separated from each
	//Other by ampersand, and the the individual names and values are 
	//Seperated from each other by colons. We use the split() method
	//to parse everything.
	var a = cookieval.split('&');		//Break it into an 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 into the cookie object.
	//Note that we unescapre() 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;
}

//This function is the remove() method of the cookie object
Cookie.prototype.remove = function(){
	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;
}

	
		
		
		
		
		
		