/**
 * @author arnaudgs
 */
var NavLoader = new Class({
	Implements : Options,
	options : {
		xmlUrl : '/2010/xml/navdo.xml',
		pays : '',
		lang : ''
	},
	
	initialize : function(options) {
		this.setOptions(options);
		
		var request = new Request({
			url : this.options.xmlUrl,
			method : 'get',
			datas : {
				LANG : this.options.lang,
				PAYS : this.options.pays
			},
			onComplete : this.xmlLoadedHandler.bind(this)
			
		});
		request.send();
	},
	
	xmlLoadedHandler : function(xmlStr, xmlDom) {
		var obj = new XML2OBJ(xmlDom, {arrayForcedNode: ['sousmenu'], arrayForcedAttribute:"_attributes"}).getJSON();
		
		this.setDatas(obj.header);
		
		while(NavLoader.callbacks.length>0)
			NavLoader.callbacks.pop()(this.datas);
	},
	
	setDatas : function(datas) {
		this.datas = {};
		
		// set datas for rapid access
		this.datas.villages = {};
		this.datas.villages.label = datas.villages._attributes.libmenu;
		this.datas.villages.village = datas.villages.village.map(function(village){
			var v = village._attributes;
			v.name = village.txt;
			return v;
		});
		
		this.datas.zones = datas.zones.zone.map(function(zone){
			return {'code' : zone._attributes.code, 'name' : zone.txt, 'villages' : []}
		});
		/*
		this.datas.zones = datas.zones.zone.map(function(zone){
			return {'code' : zone._attributes.code, 'name' : zone.txt, 'villages' : []}
		}).sort(function(a, b){
			return a.code - b.code;
		});
		*/
		this.datas.villages.village.each(function(village){
			var indZone = 0;
			for (var i = 0; i< this.datas.zones.length; i++) {
				var dest = this.datas.zones[i];
				if (dest.code == village.zonegeo){
					indZone = i;
					break;
				}
			}
			this.datas.zones[indZone].villages.push(village);
			//this.datas.zones[village.zonegeo - 1].villages.push(village);
		}.bind(this))
		
		var colors = {
			'#94D2DA' : 'std',
			'#B0A6C9' : 'activites',
			'#E3CB8B' : 'luxe',
			'#C4D97C' : 'offres'
		}
		
		
		
		//set datas for menu
		this.datas.menu = datas.menus.menu.map(function(menu){
			var m = menu._attributes;
			m.color = colors[m.color] ? colors[m.color] : 'std';
			if (menu.sousmenu){
				m.sousmenu = menu.sousmenu.map(function(sousmenu){
					return sousmenu._attributes;		
				})
			}
			return m;
		});
	}
})
NavLoader.callbacks = [];
NavLoader.register = function(func) {
	NavLoader.callbacks.push(func);
}

