/* Functions for setting and getting the values of cookies in JavaScript.
   
   Author: marcus
   Date created: 17/9/2003
 */


/* Remove the first element in the array ar that
   has a value of value. Returns the new array.
 */
function remove_element(ar, value) {
	found = index_of(value, ar);

	if (found == -1)
		return ar;
	else {
		ar.splice(found, 1);
		return ar;
	}
}


/* return the keys of an array in a new array
 */
function array_keys(ar) {
	var new_array = new Array();
	var i;
	var j = 0;

	for (i in ar) {
		new_array[j] = i;
		j++;
	}
	return new_array;
}


/* return the index of val within the array ar
   return -1 if it is not found
 */
function index_of(val, ar) {
	for (var i in ar) {
		if (ar[i] == val)
			return i;
	}
	return -1;
}


/* find out if 'item' is in the array 'ar'
 */
function in_array(item, ar) {
	i = index_of(item, ar);
	if (i == -1)
		return false;
	else
		return true;
}


/* next 4 functions from some anonymous Javascript site
 */
function getexpirydate(nodays) {
	var UTCstring;

	Today = new Date();
	nomilli = Date.parse(Today);
	Today.setTime(nomilli + nodays*24*60*60*1000);
	UTCstring = Today.toUTCString();

	return UTCstring;
}


function getcookie(cookiename) {
	var cookie = document.cookie.split('; ');

	for (var i = 0; i < cookie.length; i++) {
		var crumb = cookie[i].split('=');
		if (cookiename == crumb[0] && crumb[1]) {
			return unescape(crumb[1]);
		}
	}
}


function setcookie(name, value, duration) {
	cookiestring = name + "=" + escape(value);

	if (duration) {
		cookiestring += "; EXPIRES=" + getexpirydate(duration);
	}

	cookiestring += "; PATH=/";

	document.cookie = cookiestring;

	if (!getcookie(name))
		return false;
	else 
		return true;
}


function deletecookie (name) { 
	var exp = new Date(); 
	exp.setTime (exp.getTime() - 1); 
	var cval = getcookie(name); 
	document.cookie = name + "=" + cval + "; path=/; expires=" + exp.toGMTString(); 
} 


/* Return a javascript array that has been stored in a cookie.
 */
function cookie_array(name) {
	var c_ar = getcookie(name);

	if (c_ar) {
		c_ar = c_ar.replace(/'/g,'').split(',');
	}
	else
		c_ar = new Array();

	return c_ar;
}


/* Store a javascript array in a cookie
 */
function set_cookie_array(name, ar) {
	setcookie(name, stringify(ar), false);
}


/* Add an element to a JavaScript array stored in a cookie
 */
function cookie_array_add(name, value) {
	var c_ar = cookie_array(name);
	if (!in_array(value, c_ar))
		c_ar.push(value);
	else
		return;
	
	set_cookie_array(name, c_ar);
}


/* Remove an element from a JavaScript array stored in a cookie
 */
function cookie_array_remove(name, value) {
	var c_ar = cookie_array(name);
	c_ar = remove_element(c_ar, value);

	set_cookie_array(name, c_ar);
}


/* Works like Array.join() except we also want to quote each item
   in the array.
 */
function stringify(ar) {
	var str = '';
	var start = true;
	for (i in ar) {
		if (!start)
			str += ',';
		else
			start = false;				
	
		str += "'" + ar[i] + "'";
	}
	return str;					
}	

