cli.lib.namespace("cli.set");

cli.set.base = function (name, def, txt, min, max) {
	this.name = name;
	this.txt = txt;
	this.def = def;
	(max) ? this.max = max : this.max = 2000;
	(min) ? this.min = min : this.min = 0;

	if (min && max) this.txt += " (" + min + ".." + max + ")";

	this.get = function () {
		return eval("" + this.name + ";");
	};
	this.set = function (val) {
		if (val >= this.min && val <= this.max) eval("" + this.name + " = '" + val + "';");
		return true;
	};

}

cli.set.list = new Object();
cli.set.list['lang'] = new cli.set.base("cli.config.lang", "en", "translate default language");
cli.set.list['lang'].set = function (val) {
	if (cli.lang.reverse[val]) cli.config.lang = val;
	else if (cli.lang.list[val]) cli.config.lang = cli.lang.list[val];
	else return false;
	return true;
};

cli.set.list['results'] = new cli.set.base("cli.config.numres", "20", "number of results for tumblr feed", 1, 100);
cli.set.list['timeout'] = new cli.set.base("cli.config.timeout", "4", "timeout for ajax requests in seconds", 1, 100);

cli.set.list['style.bg'] = new cli.set.base("cli.config.bgcolor", "#003000", "cli background color");
cli.set.list['style.bg'].set = function (val) {
	if (cli.gui.setstyle("body", "backgroundColor", val) && cli.gui.setstyle("inputfield", "backgroundColor", val)) {
		cli.config.bgcolor = val;
		return true;
	}
	else return false;
}

cli.set.list['style.fg'] = new cli.set.base("cli.config.fgcolor", "#00F000", "cli font color");
cli.set.list['style.fg'].set = function (val) {
	if (cli.gui.setstyle("body", "color", val) && cli.gui.setstyle("inputfield", "color", val)) {
		cli.config.fgcolor = val;
		return true;
	}
	else return false;
}

cli.set.list['style.hl'] = new cli.set.base("cli.config.hlcolor", "#32A9FF", "cli highlight color");
cli.set.list['style.hl'].set = function (val) {
	cli.gui.setstyleclass(".info", "color: " + val);
	cli.gui.setstyleclass("a:visited.info", "color: " + val);
	cli.config.hlcolor = val;
	return true;
}

cli.set.list['style.sh'] = new cli.set.base("cli.config.shcolor", "#D8D8D8", "cli 'shaded' color");
cli.set.list['style.sh'].set = function (val) {
	cli.gui.setstyleclass(".less", "color: " + val);
	cli.config.shcolor = val;
	return true;
}

cli.set.list['style.link'] = new cli.set.base("cli.config.linkcolor", "#677CCF", "cli link color");
cli.set.list['style.link'].set = function (val) {
	cli.gui.setstyleclass("a", "color: " + val);
	cli.config.linkcolor = val;
	return true;
}

cli.set.list['style.vlink'] = new cli.set.base("cli.config.vlinkcolor", "#551a8b", "cli visited link color");
cli.set.list['style.vlink'].set = function (val) {
	cli.gui.setstyleclass("a:visited", "color: " + val);
	cli.config.vlinkcolor = val;
	return true;
}

cli.set.list['place.width'] = new cli.set.base("cli.config.mapwidth", "300", "width of map image", 20, 600);
cli.set.list['place.height'] = new cli.set.base("cli.config.mapheight", "150", "height of map image", 20, 500);

cli.set.init = function (context, result) {

	if (window['cli.config.user'] && cli.config.user != "guest") {
		if (!context) {
			return;
		}
		else if (cli.ajax.iscontext(context)) {

			cli.gui.outln("Loading remote settings...");
			cli.lib.cookie.getfromstr(document.cookie);
			cli.lib.cookie.getfromstr(result, true);

		}

	}
	else {
		cli.gui.outln('<span style="color: #D8D8D8">login as:</span> guest');
		cli.gui.outln('<span style="color: #ff0000">Access denied</span>');
		cli.gui.outln('<span style="color: #D8D8D8">guest@ill.cc\'s password:</span>');
		cli.lib.cookie.getfromstr(document.cookie);
	}

	var cookies = cli.lib.cookie.getall();

	for (key in cli.set.list) {
		var c = false;
		if (cookies[key]) c = cookies[key];
		if (c && cli.set.list[key].set(c)) {
			cli.gui.outln("&nbsp;" + key + " => &quot;" + c + "&quot;.");
		}
		else {
			cli.set.list[key].set(cli.set.list[key].def);
		}
	}

	cli.gui.outln("");
	cli.getquery();

}
