//
// Jardin des savoirs
// 
// Infrastructure
//
;(function(){

dojo.provide("jds.jds");

dojo.require("dojo._base.xhr");

jds = new Object();
dojo.mixin(jds, {
	
	config : {
		// base de l'appli
		baseUrl: null,
		// réécriture des a.href
		addMojo: false
	},

	// base url complète
	_walt: null,

	init: function() {
		//console.log("jds.init(): baseUrl="+this.config.baseUrl);
		if (!this.config.baseUrl) {
			console.error("jds.config.baseUrl empty");
			return;
		}
		var dummy = dojo.create('a',{href:this.config.baseUrl});
		this._walt = dummy.href;
		dojo.destroy(dummy);
		
		if (this.config.addMojo) {
			this.addMojo(dojo.body());
		}
	},

	addMojo: function(node) {
		var ss = this._walt;
		var sl = ss.length;
		dojo.query('a',node).forEach(function(node, idx, arr){
			if (node.href.substr(0,sl) != ss) return;
			//console.log(node);
			//dojo.style(node,{backgroundColor:"#eecc66"}); // marquage pour mise au point
			var walt = dojo.attr(node, "href");
			if (dojo.hasClass(node, "noMojo")) { return; }
			dojo.attr(node, "walt", walt);
			dojo.attr(node, "href", "javascript://");
			dojo.addClass(node, "mojo");
			dojo.connect(node,"click",function(evt){ jds.mainLocation(walt); });
		});
	}
});


//extrait le header X-Json
// ajoute json à xhr
dojo.mixin(dojo.contentHandlers, {
	"json-comment-optional": dojo.contentHandlers.json,
	"text-xjson": function(xhr) {
		var hdr = xhr.getResponseHeader("X-Json");
		if (dojo.isString(hdr) && hdr.length!=0) {
			try {
				xhr.json = dojo.fromJson(hdr);
			} catch (e) {
				throw new SyntaxError('Badly formed JSON header: ' + hdr);
			}
		} else {
			xhr.json = {};
		}
		return dojo.contentHandlers.text(xhr);
	}
}); // mixin dojo._contentHandlers


dojo.mixin( jds, {
	reloadTags: function() {
		xhrArgs = {
			url: this.config.baseUrl + "/tag",
			handleAs: "text-xjson",
			form: this.domNode,
			load: function(response,ioArgs) {
				if (ioArgs.xhr.json) {
					console.debug(ioArgs.xhr.json);
				}
				var node = dojo.byId("leftbar-TagCloud");
				if (node) {
					node.innerHTML = response;
					//dojo.place(node,response,'replace');
				} else {
					console.debug("missing node leftbar-TagCloud");
				}
				return response;
			},
			error: function(error){
				//dojo.byId("log").innerHTML = "<h1>status : "+error.status+"</h1>"+"<pre>"+error.responseText+"</pre>";
				console.debug(error);
			}
		};
		var deferred = dojo.xhrGet(xhrArgs);
	} // reloadTags

}); // mixin jds: reloadTags


})(); // jds.jds

