// The constructor function: creates a cookie object for the specified
// document, with a specified name and optional attributes.
// Arguments:
//   document: The Document object that the cookie is stored for. Required.
//   name:     A string that specifies a name for the cookie. Required.
//   hours:    An optional number that specifies the number of hours from now
//             that 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 optional Boolean value that, if true, requests a secure cookie.
//

function isLogged() {
    // Used with pages that present a login

    var id = readUserNameCookie();
    
    if (id == null || id.length == 0) {
        return false;
    }

    return true;
}

function Cookie(document, name, hours, path, domain, secure)
{
    // 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 (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
		this.$secure = false;
}
// This function is the store() method of the Cookie object.
function _Cookie_store()
{
    // 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 value. Note that we escape the value
    // of each state variable, in case it contains punctuation or other
    // illegal characters.
	
	// What's going on here: To add something to the value of the cookie,
	// a programmer simply adds a new property to it and assigns a value
	// to the new property. So here we are looking for the properties
	// and values that he added. We skip methods and the standard cookie
	// properties.
    var cookieval = "";
	// Next is a very valuable species of for loop that javascript has
	// borrowed from perl. It is the only way to proceed through an
	// associative array.
	
    for(var prop in this) {
        // Ignore properties with 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 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';
    // Now store the cookie by setting the magic Document.cookie property.
	
    this.$document.cookie = cookie;
}
// This function is the load() method of the Cookie object.
function _Cookie_load()
{
    // First, 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.
   
   	// This is a neat trick, again reminiscent of perl.
	// Splitting a string creates a list that can be assigned to one variable!
	// Elements of a list can be referenced as elements of an array!
	// And notice the cool way of splitting the elements of the array,
	// which creates a multidimensional array.
	
	var a = cookieval.split('&');    // Break it into 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;
}
// This function is the remove() method of the Cookie object.
function _Cookie_remove()
{
    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;
}
// Create a dummy Cookie object, so we can use the prototype object to make
// the functions above into methods.
new Cookie();
Cookie.prototype.store = _Cookie_store;
Cookie.prototype.load = _Cookie_load;
Cookie.prototype.remove = _Cookie_remove;
function readUserNameCookie() {
	var userName = "";
	
	if (document.cookie != "") {
		// there is a cookie for pages in this directory
		// look for the user value
		
		var the_cookie = document.cookie;
		var userPosition = the_cookie.indexOf("user=");
		
		if (userPosition != -1) {
			// found it
			
			var start = userPosition + 5;
			var finish = the_cookie.indexOf(";", start);
			if (finish == -1) finish=the_cookie.length;
			userName = the_cookie.substring(start, finish);
			userName = unescape(userName);
		}	 
	}
	return userName;	
}
function readMemberCookie() {
	var userName = "";
	
	if (document.cookie != "") {
		// there is a cookie for pages in this directory
		// look for the user value
		
		var the_cookie = document.cookie;
		var userPosition = the_cookie.indexOf("member=");
		
		if (userPosition != -1) {
			// found it
			
			var start = userPosition + 7;
			var finish = the_cookie.indexOf(";", start);
			if (finish == -1) finish=the_cookie.length;
			userName = the_cookie.substring(start, finish);
			userName = unescape(userName);
		}	 
	}
	return userName;	
}
function writeMemberCookie(memberNumber) {
	 var the_cookie = 'member=' + escape(memberNumber) + ';';
	 the_cookie += 'path=/;';
	 document.cookie=the_cookie;
}

// places an expired cookie in lieu of the current one.
// the name parameter is the name of the first name=value;
// pair in the cookie; member=880988, for example.

function removeCookie(c)
{
	var name = c;
	
	if (document.cookie != "") {
	
		// there is a cookie for pages in this directory
		// look for the name value
		
		var the_cookie = document.cookie;
		var namePosition = the_cookie.indexOf(name + '=');
		
		if (namePosition != -1) {
			
			// found it
			
			var start = namePosition + name.length + 1;
			var finish = the_cookie.indexOf(";", start);
			if (finish == -1) finish=the_cookie.length;
			var newCookie = name + '=' + the_cookie.substring(start, finish);
    			newCookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT;';
 			newCookie += 'path=/;';
			newCookie = unescape(newCookie);
			document.cookie = newCookie;
		}
	}
}

function writeUserNameCookie(userName) {
     var expiration = new Date("December 31, 2023");
     var expirationDate = expiration.toGMTString();
     var the_cookie = "user=" + escape(userName);
     the_cookie = the_cookie + ";expires=" + expirationDate;
	 the_cookie += ';path=/;';
     document.cookie=the_cookie;
}
function dropProductCookie(cookieObj, prod) {
	var a = prod.split(',');
	var PLoc = a[1];
	var CLoc = a[0];
	
	// Add a product to the cookie if we don't already have it
	
	if (cookieObj.products == null)
		cookieObj.products = prod;
	else if (cookieObj.products.indexOf(prod) == -1)		
		cookieObj.products += '.' + prod; // use a decimal to separate them
		
	cookieObj.store();	
}
function dropWishCookie(prod) {
		
	// Add a product to the cookie if we don't already have it
	
	if (wishList.products == null || !wishList.products.length)
		wishList.products = prod;
	else if (wishList.products.indexOf(prod) == -1)
		wishList.products += '.' + prod; // use a decimal to separate them
		
	wishList.store();	
}
