var FAVORITES = 'favorites';
var DELIMITER = ':';
var LIFE_SPAN = 365;
var PATH = '/';
var CUT_SIZE = 10;

/**
 * addFavorite
 * @param {type} oid
 */
function addFavorite(oid) {
	if (oid == null) {
		return;
	}
	deleteFavorite(oid); //change oid position if exist
	var favorites = getCookie(FAVORITES)
	if (favorites == null) {
		setCookie(FAVORITES, oid + DELIMITER, LIFE_SPAN, PATH);
	} 
	else {
		// FIXME: 4096 (probably 4015) length from cookie content
		// isn't more relevant for this case (after restriction oids list size)
		while (favoritesSize(favorites) >= CUT_SIZE) {
			favorites = truncateFavorites(favorites);
		}
		favorites += oid + DELIMITER;
		setCookie(FAVORITES, favorites, LIFE_SPAN, PATH);
	}
}

/**
 * deleteFavorite
 * @param {type}oid
 */
function deleteFavorite(oid) {
	if (oid == null) {
		return;
	}
	var favorites = getCookie(FAVORITES);
	if (favorites == null) {
		return;
	} 
	else {
		var result = '';
		var index = 0;
		var dIndex = favorites.indexOf(DELIMITER, 0);
		do {
			var aOid = favorites.substring(index, dIndex);
			index = dIndex + 1;
			if (aOid != oid) {
				result += aOid + DELIMITER;
			}
			dIndex = favorites.indexOf(DELIMITER, index);
		} while (dIndex != -1);
		setCookie(FAVORITES, result, LIFE_SPAN, PATH);
	}
}

/**
 * deleteFavoritesWithConfirm
 * @param {type} oid, message, id 
 */
 function deleteFavoritesWithConfirm(oid, message, id) {
 	var del = confirm(message);
 	if( del == true ){
 		deleteFavorite(oid);
 		setDysplay(id,'none');
 		displayFavorites(FAVORITES);
 	} 
 }
 
/**
 * favoritesSize
 * @param {type} favorites
 */
function favoritesSize(favorites) {
	var size = 0;
	if (favorites == null || favorites.length == 1) {
		return 0;
	} 
	else {
		var index = favorites.indexOf(DELIMITER, 0);
		while (index != -1) {
			size++;
			index = favorites.indexOf(DELIMITER, index + 1);
		} ;
	}
	return size;
}

/**
 * truncateFavorites
 * @param {type} favorites
 */
function truncateFavorites(favorites) {
	if (favorites == null) {
		return;
	} 
	else {
		var index = favorites.indexOf(DELIMITER, 0);
		var delOid = favorites.substring(0, index);
		
		setDysplay('oid'+delOid, 'none');
		return favorites.substring(index + 1);
	}
}

/**
 * getFavorites
 */
function getFavorites() {
	// alert('getFavorites');
	return getCookie(FAVORITES);
}
 
/**
 * setDysplay
 */
function setDysplay(id, state) {
	var object = document.getElementById(id);
	if( object != null )
		object.style.display = state;
}

/**
 * displayFavorites
 * @param {type} id 
 */
 function displayFavorites(id) {
 	var favorites = getCookie(FAVORITES);
 	if( favoritesSize(favorites) == 0 ){
 		setDysplay(id, 'none'); 
 		return;
 	}	
 	setDysplay(id, 'block'); 
 }
