//////////////////////////////////////////////////////////////////////////////
//	jaxcookie.js
//
//	Description:
//		Cookie class.
//////////////////////////////////////////////////////////////////////////////
Jax.Cookie = function()
{
    var m_name = null;
    var m_expiry = null;
    var m_path = null;
    var m_domain = null;
    var m_secure = false;
    var m_delimiters = ";=|=";
    
    // Declare class and set instance.
    Jax.oop.declare(Jax.Cookie)
    this.setInstance();

    // Argument settings.
    if (arguments.length)
    {
        if (Jax.js.isObject(arguments[0])) {
            var obj = arguments[0];
            m_name = obj.name;
            m_path = obj.path;
            m_domain = obj.domain;
            m_secure = obj.secure;
        }
        else {
            m_name = arguments[0];
            if (arguments[1]) m_expiry = arguments[1];
            if (arguments[2]) m_path = arguments[2];
            if (arguments[3]) m_domain = arguments[3];
            if (arguments[4]) m_secure = true;
        }
    }

    this.Delete = function() {
        var cookieSep = m_delimiters.charAt(0);
        var cookieEq = m_delimiters.charAt(1)

        // Set up cookie removal.
        var cookie = m_name + "=";
        cookie +=		
              ((this._path) ? cookieSep + " path" + cookieEq : "" ) +
              ((this._domain) ? cookieSep + " domain" + cookieEq : "" ) +
            cookieSep + " expires" + cookieEq + "Fri, 02-Jan-1970 00:00:00 GMT";

        // Remove the cookie.
        document.cookie = cookie;
    }
    
    this.Read = function() {
        var cookieSep = m_delimiters.charAt(0);
        var cookieEq = m_delimiters.charAt(1)
        var varsSep = m_delimiters.charAt(2);
        var varsEq = m_delimiters.charAt(3);

        // Locate the cookie from the object name.
        var reCookie = new RegExp(m_name + cookieEq + "([^" + cookieSep + "]+)" );
        var results = reCookie.exec( document.cookie )
        if (results == null)
            return false;

        // Construct cookie variables from the cookie value.
        var cookieValue = results[1];
        var varPairs = cookieValue.split(varsSep);
        for (var ii = 0; ii < varPairs.length; ++ii) {
            var variable = varPairs[ii].split(varsEq);
            this[variable[0]] = unescape(variable[1]);
        }

        return true;
    }

    this.Write = function() {
        var strCookie = "";
        var variables = Jax.oop.reflection.getAttributes(this);
        var cookieSep = m_delimiters.charAt(0);
        var cookieEq = m_delimiters.charAt(1)
        var varsSep = m_delimiters.charAt(2);
        var varsEq = m_delimiters.charAt(3);
        
        // Build cookie value from object variables.
        for (var ii = 0; ii < variables.length; ++ii ) {
            if (!strCookie.isEmpty()) strCookie += varsSep;
            strCookie += variables[ii] + varsEq + escape(this[variables[ii]]);
        }
            
        // Complete the cookie string.
        var cookie = m_name + "=" + strCookie;
        cookie +=		
            ((m_expiry)	? cookieSep + " expires" + cookieEq + m_expiry.toGMTString() : "") +
              ((m_path)	? cookieSep + " path" + cookieEq + m_path : "") +
              ((m_domain) ? cookieSep + " domain" + cookieEq + m_domain : "") +
              ((m_secure) ? cookieSep + " secure" : "");

        // Write the cookie.
        document.cookie = cookie;
    }
}