/**
 *  File: cookies.js
 *  Purpose: Methods to create, read, update, and delete cookies.
 *  Revisions: 2005Aug02 - initial rev
 *
 **/

/**
 *  datePart
 *  0 = seconds
 *  1 = minutes
 *  2 = hours
 *  3 = days
 *  4 = years
 *
 */
var COOKIES_UNIT_TOKEN = "; ";
var COOKIES_KEY_TOKEN = "=";
var COOKIES_DOMAIN = ";domain=.aplia.com";
var COOKIES_PATH = ";path=/";

function setCookie( name, value, datePart, datePartFromNow ) {
    var date = new Date();
    var expires = "";

    var MILLISEC_SEC = 1000; // 1000 ms
    var MILLISEC_MIN = 60 * MILLISEC_SEC; // s * ms
    var MILLISEC_HOUR = 60 * MILLISEC_MIN; // m * s * ms
    var MILLISEC_DAY = 24 * MILLISEC_HOUR; // h * m * s * ms
    var MILLISEC_YEAR = 365 * MILLISEC_DAY; // d * h * m * s * ms, ok to assume 365

    var arrTimeSpans = new Array();
    arrTimeSpans[0] = MILLISEC_SEC;
    arrTimeSpans[1] = MILLISEC_MIN;
    arrTimeSpans[2] = MILLISEC_HOUR;
    arrTimeSpans[3] = MILLISEC_DAY;
    arrTimeSpans[4] = MILLISEC_YEAR;

    if( (datePart != null) && (!isNaN(datePart)) && (datePartFromNow != null)) {
        date.setTime( date.getTime() + (datePartFromNow * arrTimeSpans[datePart]) );
        expires =  "expires=" + date.toString();
    } else if( name != null && value != null ) {
         // set session level cookie
    } else {
        //alert('[Error] setCookie( ' + name + ', ' + value + ', ' + datePart + ', ' + datePartFromNow);
    }
    // "toGMTString()" and "toUTCString()" is really hard to compare, use of "toLocaleString()"
    // doesn't seem to actually set the cookie, just use "toString()"
    //alert(document.cookie);
    document.cookie = (name + "=" + escape(value) + ";" + expires + COOKIES_PATH);
}


function getCookie( name ) {
    var retVal = null;
    var startIdx = document.cookie.indexOf( name );
    if( startIdx == -1 ) {
        return null;
    } else {
        var arrCookies = getCookiesArray();
        retVal = arrCookies[name];
    }
    return retVal;
}

/**
 *  return an associative array of cookie names and values
 *
 */
function getCookiesArray() {
    var retVal = new Array();
    var dc = document.cookie;
    var arrCookie = document.cookie.split(COOKIES_UNIT_TOKEN);
    for( var i=0; i < arrCookie.length; i++ ) {
        var arrCrumb = arrCookie[i].split(COOKIES_KEY_TOKEN);
        var name = arrCrumb[0];
        var value = unescape( arrCrumb[1] );
        //alert("name " + name + ", " + value)
        retVal[ name ] = value;
    }
    return retVal;
}

function deleteCookie( name ) {
    document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;" + COOKIES_PATH;
}

// delete all cookies with this prefix
function deleteCookies( prefix ) {
    var arrCookies = getCookiesArray();
    for( var name in arrCookies ) {
        // see if the name starts with the prefix
        if( name.indexOf(prefix) == 0 ) {
            deleteCookie(name);
        }
    }
}

// delete all cookies with this prefix
function deleteAllCookies() {
    var arrCookies = getCookiesArray();
    for( var name in arrCookies ) {
        deleteCookie(name);
    }
}
