var Config = function(param_path){
	
	this._options = {};
	this._locked = false;
	var ref = this;
	Config.instance = this;
	
	$.ajax({
		  url: param_path,
		  success: function(param_data) {
				var xml = $.createXMLDocument(param_data);
				var srcObject = new XML2Object(xml).finalObject;
				for (var i in srcObject) {
					ref._options[i] = srcObject[i];
				}
				$(document).trigger('config_ready');
			},
		  dataType: 'html'
		});
};


Config.getInstance =  function(){
	if (Config.instance != undefined) 
		return Config.instance;
};


Config.prototype = {
					
	get:function(param_key) {
		if (!this.hasOption(param_key))
			console.error('Config : ' +  param_key + ' option does not exist !');
		else {
			var copy = jQuery.extend(true, {}, this._options);
			return copy[param_key];
		}
	},


	hasOption:function(param_key) {
		 return this._options.hasOwnProperty(param_key);
	},


	overWrite:function(param_object) {
		if (this._locked)
			return;
			
		for (var i in param_object) {
			console.log('Config : overwriting ' + i); 
			this._options[i] = param_object[i];
		}
	},


	addOption:function(param_key , param_value){
		if (!this._locked){
			console.error('Config : cannot add option (config locked)');
			return;
		}
		
		if(!this.hasOption(param_key)){
			console.error('Config : cannot add option (already exists)');
			return;
		}
		
		this._options[param_key] = param_value;
	},


	lock:function(){
		_this.locked = true;
	},


	unlock:function(){
		_this.locked = false;
	}

		
};
	

