/**
##############################################################################################
#
#		Title: BBC RaW - AcP (Accessibility control Panel)
#
#		Description: Behaviour for widget which allows customisable font size and colour schemes
#
##############################################################################################
#   $Source: $
#   $Author: Michael Koderisch $
#   $Revision: $
#   $Date: $ 
##############################################################################################
*/

/**
 * Accessibility widget
 */

AcP = {
	/**
	 * Properties
	 */
	defaultTheme : 1,
	defaultFontSize : "normal",
	fontSizes : ACP_FONT_SIZES, // set in acp_head include
	
	/**
	 * Function: init
	 *
	 * Description: Performs onLoad initialisation of accessibility widget
	 */
	init : function(){
		try {
			// register handlePrefsChange with UserPrefsStore.setPrefs()
			PrefsStore.addPrefsChangeListener(AcP.handlePrefsChange);
			
			// get UserPrefsStore prefs if available
			var CurrentPrefs = PrefsStore.getPrefs();
			
			// if no preferences have been set yet
			if (!CurrentPrefs){
				// we set default values
				var StorePrefs = {
					fontSize: AcP.defaultFontSize,
					theme: AcP.defaultTheme
				}
				PrefsStore.setPrefs(StorePrefs);
				CurrentPrefs = PrefsStore.getPrefs();
			}
						
			// check if prefs store is supported and if so initialise ACP
			if (CurrentPrefs){
				AcP.setFontSize(CurrentPrefs.fontSize?CurrentPrefs.fontSize:AcP.defaultFontSize);
				AcP.setTheme(CurrentPrefs.theme?CurrentPrefs.theme:AcP.defaultTheme);
				// Add common event listeners
				if($('acp')) {
					bbcjs.dom.addEventListener($('acp-text-normal'), 'click', AcP.handleChangeFontSize);
					bbcjs.dom.addEventListener($('acp-text-bigger'), 'click', AcP.handleChangeFontSize);
					bbcjs.dom.addEventListener($('acp-text-biggest'), 'click', AcP.handleChangeFontSize);
					bbcjs.dom.addEventListener($('acp-theme-1'), 'click', AcP.handleClickTheme);
					bbcjs.dom.addEventListener($('acp-theme-2'), 'click', AcP.handleClickTheme);
					bbcjs.dom.addEventListener($('acp-theme-3'), 'click', AcP.handleClickTheme);
					bbcjs.dom.addEventListener($('acp-theme-4'), 'click', AcP.handleClickTheme);
					bbcjs.dom.addEventListener($('acp-theme-5'), 'click', AcP.handleClickTheme);
					bbcjs.dom.addEventListener($('acp-theme-6'), 'click', AcP.handleClickTheme);
					bbcjs.dom.addEventListener($('acp-reset'), 'click', AcP.handleClickReset);
				
					// Unhide the widget
					$('acp').style.display = 'block';
				}
			}
			
		} 
		catch (e) {
			// A JS error occurred, probably because cookies are not available, so don't do anything
		}
	},

	/**
	 * Function: handleChangeFontSize
	 *
	 * Description: Handles click of font size control
	 */
	handleChangeFontSize : function(e){
		bbcjs.dom.stopEvent(e);	// stop the event to prevent link to '#'
		//console.log("handleChangeFontSize() called");
		PrefsStore.mergePrefs({fontSize: e.target.id.split('-')[2]});
		
	},

	/**
	 * Function: handleClickTheme
	 *
	 * Description: Handles click of a theme control
	 */
	handleClickTheme : function(e){
		bbcjs.dom.stopEvent(e);	// stop the event to prevent link to '#'
		PrefsStore.mergePrefs({theme: e.target.id.split('-')[2]});	
	},
	
	/**
	 * Function: handleClickReset
	 *
	 * Description: Handles click of the reset control
	 */
	handleClickReset : function(e){
		bbcjs.dom.stopEvent(e);	// stop the event to prevent link to '#'
		PrefsStore.mergePrefs({theme: AcP.defaultTheme, fontSize: AcP.defaultFontSize});
	},
	

	/**
	 * Function: handlePrefsChange
	 *
	 * Description: Changes styles of the page
	 */
	handlePrefsChange : function(){
		var CurrentPrefs = PrefsStore.getPrefs();
		if (CurrentPrefs){
			if (CurrentPrefs.theme && (CurrentPrefs.theme != AcP.currentTheme)) AcP.setTheme(CurrentPrefs.theme);
			if (CurrentPrefs.fontSize && (CurrentPrefs.fontSize != AcP.currentFontSize)) AcP.setFontSize(CurrentPrefs.fontSize);
		}
	},
	
	/**
	 * Function: setTheme
	 *
	 * Description: Dynamically inserts a link tag into the page, 
	 * causing the currently specified theme stylesheet to be loaded
	 */
	setTheme : function(theme){

		AcP.currentTheme = theme;
		if ($('current-theme')) $('current-theme').href = "/raw/css/themes/theme" + AcP.currentTheme + ".css";
		// if page-specific themed css is used also change this to the current theme
		if ((typeof(acpThemeSet) != "undefined") && (acpThemeSet != "")){
			if ($('user-theme'))
				$('user-theme').href = acpThemeSet + "-" + AcP.currentTheme + ".css";
		}
		// if page-specific themed css for IE is used also change this to the current theme
		if (typeof(acpIEThemeSets) != "undefined")
		{
			for (i in acpIEThemeSets){
				var suffix = acpIEThemeSets[i];
				var LinkElement = $('user-theme' + suffix);
				if (LinkElement){
					LinkElement.href = acpThemeSet + suffix + "-" + AcP.currentTheme + ".css";
				}
			}
		}
		
		//MK: nudge select elements as IE6 does not change styles automatically
		var selectElements = document.getElementsByTagName('select'); // get all select elements
		for (elem=0; elem<selectElements.length; elem++){
			var thisElem = selectElements[elem];
			bbcjs.dom.addClassName(thisElem,'nudge'); // add class
			bbcjs.dom.removeClassName(thisElem,'nudge'); // and remove it again
		}
		
		// remove 'selected' class from all theme buttons
		var themesList = bbcjs.dom.children($("acp-themes"));
		for (i in themesList)
		{
			bbcjs.dom.removeClassName(themesList[i],'selected');
		}
		bbcjs.dom.addClassName($("acp-c-theme-" + theme),'selected'); // add selected class to the selected theme button
	},

	/**
	 * Function: setFontSize
	 *
	 * Description: Sets the relative font size of the document body
	 * 
	 * @param {String} sizeName - name of text size to be set
	 */
	setFontSize : function(sizeName){
		AcP.currentFontSize = sizeName;
		var size = AcP.fontSizes[sizeName]
		if ($('blq-main'))
			$('blq-main').style.fontSize = size;
		if ($('popup'))
			$('popup').style.fontSize = size;
		// remove 'selected' class from all text size buttons
		var sizesList = bbcjs.dom.children($("acp-sizes"));
		for (i in sizesList)
		{
			bbcjs.dom.removeClassName(sizesList[i],'selected');
		}
		bbcjs.dom.addClassName($("acp-c-text-" + sizeName),'selected'); // add selected class to the selected text size button
		// resize promos panel if necessary
		if(RawCarousel) RawCarousel.resize();
	}

};

/**
 * Compile-time executed code
 */
bbcjs.addOnLoadItem(AcP.init);

/**
  * END
  */