/*global DGS, window, console, document */
Reflow.widgets.Rsm = function (objParent, params){
	var parent, id, dataList, defaultDataList, defaultLanguage, 
		getUrl, getText, loadData, init, noDataText;
	
	// Must contain the main object instance
	parent = objParent;
	
	// Plugin ID/Name
	id = "Rsm";
	
	// Text displayed when a label is not found
	//noDataText = (parent.debugMode ? "No data" : "");
	noDataText = "No data";
	
	// Default language to use
	defaultLanguage = "";
	
	// Data Object
	dataList = {};
	defaultDataList = {};

	/**
	 * Look for a label and return the corresponding data
	 *	@name searchLabel
	 *  @type {function}
	 */
	searchLabel = function (data, label) {
		if (data !== undefined && data !== null && data.length != null) {
			for (var i = 0; i < data.length; i++) {
				if (data[i].label === label) {
					return data[i].data;
				}
			}
		}
		return noDataText;
	};
	
	/**
	 * Look for a label and return the corresponding url
	 *	@name getUrl
	 *  @type {function}
	 */
	getUrl = function (label, lang) {
		
		if (lang === null || lang === defaultLanguage || dataList[lang] === undefined) {
			return searchLabel (defaultDataList.url, label);
		}
		else {
			return searchLabel (dataList[lang].url, label);
		}
	};
	
	/**
	 * Look for a label and return the corresponding text
	 *	@name getText
	 *  @type {function}
	 */
	getText = function (label, lang) {
		if (lang === null || lang === defaultLanguage || dataList[lang] === undefined) {
			return searchLabel (defaultDataList.text, label);
		}
		else {
			return searchLabel (dataList[lang].text, label);
		}
	};
	
	/**
	 * Look for a label and return the corresponding pattern
	 *	@name getPattern
	 *  @type {function}
	 */
	getPattern = function (label, lang) {
		if (lang === null || lang === defaultLanguage || dataList[lang] === undefined) {
			return searchLabel (defaultDataList.pattern, label);
		}
		else {
			return searchLabel (dataList[lang].pattern, label);
		}
	};
	
	/**
	 * Look for a label and return the corresponding image url
	 *	@name getPattern
	 *  @type {function}
	 */
	getImage = function (label, lang) {
		if (lang === null || lang === defaultLanguage || dataList[lang] === undefined) {
			return searchLabel (defaultDataList.images, label);
		}
		else {
			return searchLabel (dataList[lang].images, label);
		}
	};
	
	/**
	 * Add Data
	 *	@name addData
	 *  @type {function}
	 */
	addData = function (data) {
		if (data !== null && data.data !== undefined) {
			for (var dt in data.data) {
				if (dataList[dt] !== undefined) {
					for (var item in data.data[dt]) {
						if(dataList[dt][item] !== undefined) {
							dataList[dt][item] = dataList[dt][item].concat(data.data[dt][item]);
						}
						else {
							dataList[dt][item] = data.data[dt][item];
						}
					}
				}
				else {
					dataList[dt] = data.data[dt];
				}
			}
		}		
	};
	
	/**
	 * Load Data object
	 *	@name loadData
	 *  @type {function}
	 */
	loadData = function (data) {
		
		if (data !== null && typeof(data) === "object") {
			// Get data
			if (data.data !== undefined && typeof(data.data) === "object") {
				dataList = data.data;
			}
			
			// Get the choosen lang
			if (data.defaultLanguage !== undefined) {
				defaultLanguage = data.defaultLanguage;
			}
			// If no lang choose, the first become the default one
			else {
				for (var lg in dataList) {
					defaultLanguage = lg;
					break;
				}
			}

			// Set default data list
			if (dataList !== null && dataList[defaultLanguage] !== null) {
				defaultDataList = dataList[defaultLanguage];
			}
		}		
	};
	
	/**
	 *  Initialisation
	 *	@name init
	 *  @type {function}
	 */
	 /*
	 *  @data {object} : data object
	 */
	init = function (data) {
		loadData (data);
	};
	
	/**
	 * Return section
	 */
	return {
		// Constants
		id: id,
		
		// Methods
		init: init,
		loadData: loadData,
		addData: addData,
		getText: getText,
		getUrl: getUrl,
		getPattern: getPattern,
		getImage: getImage
	};
	
};
jQuery(document).ready(function() {
	if(typeof dataLoca!="undefined"){
		Reflow.widgets.rsm = new Reflow.widgets.Rsm(Reflow, {});
		Reflow.widgets.rsm.init(dataLoca);
		
	}else{
		Reflow.widgets.rsm = new Reflow.widgets.Rsm(Reflow, {});
		Reflow.widgets.rsm.init();		
	}
});
