/*
 * Copyright (C) 2005 Pinuts media+science GmbH * All Rights Reserved
 *
 * The copyright notice above does not evidence any
 * actual or intended publication of this source code.
 *
 * $Id: cookies.js,v 1.1 2009-04-14 13:00:19 schreiber Exp $
 *
 * Client-side cookie management.
 */


/**
 * Return true if key is set.
 */
function cookie_isSet(key) {
    if (!document.cookie) return false;
    return (document.cookie.indexOf(key+"=") != -1);
}


/**
 * Return true if key and value is set.
 */
function cookie_isSet_val(key, val) {
    var c_val = cookie_get(key);
    if (c_val == null) return false;
    if (c_val == val) return true;
    return (c_val.indexOf("|"+ val +"|") != -1);
}


/* Single value ***************************************************************************************/

/**
 * Set key and value in cookie
 */
function cookie_set(key, val) {
    // var havetodie = cookie_get_expiry(7 * 24 * 60 * 60 * 1000);  // d * h * m * s * ms  (7 days)
    // cookie will be deleted after session
    document.cookie =  key + "=" + val + ";" // " expires=" + havetodie;
}


/**
 * Return value from given key
 */
function cookie_get(key) {
    var val = null;
    if(document.cookie) {
        var b = document.cookie.indexOf(key+"=");
      	if (b >= 0) {
      	    b = b + key.length + 1;
      	    var e = document.cookie.indexOf(";", b);
      	    if ( e < 0 ) e = document.cookie.length;
      	    val = document.cookie.substring(b, e);
      	}
    }
    return val;
}


/**
 * Delete cookie with given key
 */
function cookie_del(key) {
    document.cookie =  key + "=null; expires=" + cookie_get_expiry(0);
}


/* List of values *************************************************************************************/


/**
 * Set key (if necessary) and value in a list of values
 */
function cookie_set_list(key, val) {
    var c_val = cookie_get(key);
    if (c_val != null) {
        if (!cookie_isSet_val(key,val)) {
            var list = c_val.concat(val) + "|";
            cookie_set(key, list);
        }
    } else {
        var list = "|" + val + "|";
        cookie_set(key, list);
    }
}


/**
 * Return array of values from given key
 */
function cookie_get_list(key) {
    var val_array = null;
    var c_val = cookie_get(key);
    if (c_val != null) {
        if ((c_val.lastIndexOf("|") == 0) || (c_val.indexOf("|") == -1)) {
            return val_array;
        }
        c_val = c_val.slice(1, c_val.length-1);
        val_array = c_val.split("|");
    }
    return val_array;
}


/**
 * Delete one value of list
 */
function cookie_del_list(key, val) {
    var c_val = cookie_get(key);
    if (c_val != null) {
        var b = c_val.indexOf("|"+ val +"|");
        if ( b != -1) {
            var substr_begin = c_val.substring(0, b);
            var substr_end   = c_val.substring((b + val.length+1), c_val.length);  // we need one "|"
            var list = substr_begin.concat(substr_end);
            cookie_set(key, list);
        }
    }
}


/**
 * Genereate date of expiration
 * @param p time in milliseconds
 */
function cookie_get_expiry(p) {
    var date = new Date();
    var periode = date.getTime() + p;
    date.setTime(periode);
    return date.toGMTString();
}


/*
 * Dear Emacs,
 * Local Variables:
 *  tab-width: 4
 *  c-indent-level: 4
 *  c-basic-offset: 4
 *  indent-tabs-mode: nil
 * End:
 *
 */

