var EXPORTED_SYMBOLS = ["YOONO_UTILS"];

// Vars
const YOONO_ID = "{d9284e50-81fc-11da-a72b-0800200c9a66}";
const MAGIC_URL = 'about:blank';

Components.utils.import("resource://yoono/yoonoService.js");
// Globals
const CI = Components.interfaces;
const CL = Components.classes;
const DIRSERVICE = CL['@mozilla.org/file/directory_service;1'].getService(CI.nsIProperties);
const PREFBRANCH = CL['@mozilla.org/preferences-service;1'].getService(CI.nsIPrefBranch);
const PREFSSERVICE = CL["@mozilla.org/preferences-service;1"].getService(CI.nsIPrefService);
const PREFS = PREFSSERVICE.getBranch("extensions.yoono.");
const RDF = CL["@mozilla.org/rdf/rdf-service;1"].getService(CI.nsIRDFService);

const URL_RESOURCE            = RDF.GetResource("http://home.netscape.com/NC-rdf#URL");
const FEED_URL_RESOURCE       = RDF.GetResource("http://home.netscape.com/NC-rdf#FeedURL");
const CONSOLESERVICE = CL["@mozilla.org/consoleservice;1"].getService(CI.nsIConsoleService);

const LIVEBKM_TYPE   = "http://home.netscape.com/NC-rdf#Livemark";
const LIVETAG = '.LIV';


function Utils() {
	this.wrappedJSObject=this;
  this.addOns = {};
}

Utils.prototype.getUserAgent = function (win) {
	return(win.navigator.userAgent.toLowerCase());
}
Utils.prototype.getUserAgentAppVersion = function (win) {
	return(win.navigator.appVersion.toLowerCase());
}
Utils.prototype.getUserAgentOsCpu = function (win) {
	return(win.navigator.oscpu.toLowerCase());
}
Utils.prototype.getUserAgentPlatform = function (win) {
	return(win.navigator.platform.toLowerCase());
}
Utils.prototype.getLocale = function () {
	return (PREFBRANCH.getCharPref('general.useragent.locale'));
}

Utils.prototype.stringException = function (e) {
	return(e.toString);
}

/*
	@param str : une chaine qui represente le chemin
	@return list : une liste qui represente le chemin
	les chemins dans la chaine sont separes par des slash
	les slashs qui font partie du nom de la chaine sont echappes
	cela correspond a  split(/(?!\\)\//)
	qui semble ne pas marcher en javascript
	ensuite, on desechappe les slash
*/
Utils.prototype.splitPath = function (str) {
	// supprime le dernier caractere si c'est un '/' non precede d'un '\'
	if (str.length != 1 && str[str.length - 1] == '/' && str[str.length - 2] != '\\') {
		str = str.slice(0, -1);
	}

	var list = new Array();
	var lastpos = 0;
	var extract = '';
	var l = str.length;
	for (var pos = 0 ; pos <= l ; pos++) {
		if ((str[pos] == '/' && str[pos - 1] != '\\') || pos == l) {
			extract = str.slice(lastpos + 1,pos);
			extract = extract.replace(/\\(\\|\/)/g,'$1');
			list.push(extract);
			lastpos = pos;
		}
	}

	return list;
}

Utils.prototype.normalize = function (str) {
	if (!str)
		return str;
	str = this.replaceIEInvalids(str);
	str = str.replace(/[\s\.]*$/,'');
	return str;
}

Utils.prototype.escapePath = function(name) {
	if (!name) return '';
	name = name.replace(/\\/g, '\\\\');
	name = name.replace(/\//g, '\\/');
	return name;
}

Utils.prototype.replaceIEInvalids = function (attribute) {
	if (!attribute) return '';
	attribute = attribute.replace(/\\|:|\*|\?|"|<|>|\|/g,'');
	attribute = attribute.replace(/\//g, '-');
	return attribute;
}

/*
	@param list : une liste ou un objet
	@return obj : une copie de la liste ou de l'objet
*/
Utils.prototype.copyObjectOrArray = function (list) {
	// point final de la recursion
	if (typeof list != 'object')
		return list;

	if (list.length === undefined)
		var obj = new Object();
	else
		var obj = new Array();

	for (var i in list)
		obj[i] = this.copyObjectOrArray(list[i]);

	return obj;
}


var YOONO_UTILS = new Utils();
