/**
 * @author cbetancourt
 */

if (!DJIndexes) { var DJIndexes = {}; }
DJIndexes.MenuLoader = function() {
	
	/* private */
	
	var topMenuBar, searchPanel, searchCriteria;
	
	function _init() {
		if (DJIndexes.TopMenu) {
			searchCriteria = YAHOO.util.Dom.get('search-criteria');
			createTopMenu();
			createSearchPanel();
			createMyAccountPanel();
			attachListeners();
		}
	}
	
	function createTopMenu() {
	    topMenuBar = new YAHOO.widget.MenuBar(DJIndexes.TopMenu.container,DJIndexes.TopMenu.props);
		topMenuBar.addItems(DJIndexes.TopMenu.items);
		topMenuBar.render();
		YAHOO.util.Dom.addClass(topMenuBar.element, 'yuimenubarnav');
	}
	
	function createSearchPanel() {
		searchPanel = new YAHOO.widget.Panel('search-panel',{
			modal: true,
			width: '320px',
			visible: false,
			constraintoviewport: true,
			fixedcenter: false,
			context: ['search-button','tl','tl']
		});
		searchPanel.render();
	}
	
	function attachListeners() {
		YAHOO.util.Event.addListener(
			'search-form',
			'submit',
			DJIndexes.MenuLoader.validateSearch,
			true
		);
	}
	
	function createMyAccountPanel() {
		accountPanel = new YAHOO.widget.Panel('my-account-panel',{
			modal: true,
			width: '320px',
			visible: false,
			constraintoviewport: true,
			fixedcenter: false,
			context: ['my-account-button','tl','tl']
		});
		accountPanel.render();
	}
	
	/* utils */
		
	function trim(str, chars) {
		return ltrim(rtrim(str, chars), chars);
	}
	
	function ltrim(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	}
	
	function rtrim(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
	}
	
	/* public API */
	return {
		
		init: function() {
			_init();
		},
		
		showSearch: function() {
			searchPanel.show();
			searchPanel.focus();
		},
		
		validateSearch: function(e) {
			searchCriteria.value = trim(searchCriteria.value);
			if (searchCriteria.value=='') {
				e.preventDefault();
			}
		},
		
		hideSearch: function() {
			searchPanel.hide();
		},
		
		showAccountOptions: function() {
			accountPanel.show();
		},
		
		hideAccountOptions: function() {
			accountPanel.hide();
		}
		
	}

}();
YAHOO.util.Event.onDOMReady(DJIndexes.MenuLoader.init);