/**
 <b>Settings box</b>. It's good for demo only. You don't need this.
*/
(function($ , undefined) {

 $('#ace-settings-btn').on(ace.click_event, function(e){
	e.preventDefault();

	$(this).toggleClass('open');
	$('#ace-settings-box').toggleClass('open');
 })

 $('#ace-settings-navbar').on('click', function(){
	ace.settingFunction.navbar_fixed(null, this.checked);
 })

 $('#ace-settings-sidebar').on('click', function(){
	ace.settingFunction.sidebar_fixed(null, this.checked);
 })

 $('#ace-settings-breadcrumbs').on('click', function(){
	ace.settingFunction.breadcrumbs_fixed(null, this.checked);
 })

 $('#ace-settings-add-container').on('click', function(){
	ace.settingFunction.main_container_fixed(null, this.checked);
 })



 $('#ace-settings-compact').on('click', function(){
	if(this.checked) {
		$('#sidebar').addClass('compact');
		var hover = $('#ace-settings-hover');
		if( hover.length > 0 ) {
			hover.removeAttr('checked').trigger('click');
		}
	}
	else {
		$('#sidebar').removeClass('compact');
		$('#sidebar[data-sidebar-scroll=true]').ace_sidebar_scroll('reset')
	}
	
	if(ace.vars['old_ie']) ace.helper.redraw($('#sidebar')[0], true);
 })


 $('#ace-settings-highlight').on('click', function(){
	if(this.checked) $('#sidebar .nav-list > li').addClass('highlight');
	else $('#sidebar .nav-list > li').removeClass('highlight');
	
	if(ace.vars['old_ie']) ace.helper.redraw($('#sidebar')[0]);
 })


 $('#ace-settings-hover').on('click', function(){
	if($('#sidebar').hasClass('h-sidebar')) return;
	if(this.checked) {
		$('#sidebar li').addClass('hover')
		.filter('.open').removeClass('open').find('> .submenu').css('display', 'none');
		//and remove .open items
	}
	else {
		$('#sidebar li.hover').removeClass('hover');

		var compact = $('#ace-settings-compact');
		if( compact.length > 0 && compact.get(0).checked ) {
			compact.trigger('click');
		}
	}
	
	$('.sidebar[data-sidebar-hover=true]').ace_sidebar_hover('reset')
	$('.sidebar[data-sidebar-scroll=true]').ace_sidebar_scroll('reset')
	
	if(ace.vars['old_ie']) ace.helper.redraw($('#sidebar')[0]);
 })

 
 
 //these are only for Ace demo! 
 //we want to save only important states(sidebar-fixed and sidebar-collapsed) so before fixing sidebar or collpasing it, hide mobile menu or remove extra classes!
 //and then save class name, etc to localStorage for later retrieval
 
 /**
 $(document).on('presettings.ace', function(ev, event_name, event_val, event_source, save_state) {
	if( !save_state ) return false;
	
	var $event_name = event_name;
	if( (event_name == 'sidebar_fixed' || event_name == 'sidebar_collapsed') ) {
		var sidebar = event_source ? $(event_source) : $('#sidebar');
		var tmpClassName = sidebar.attr('class');
		sidebar.attr('class', event_name == 'sidebar_fixed' ? 'sidebar-fixed' : 'menu-min');//don't save these classes in demo
	
		//we don't use 'one' because other 'settings.ace' events could be triggered before the 'sidebar_*' one!
		$(document).on('settings.ace.sidebar', function(ev, event_name) {
			if( (event_name == $event_name) ) {
				sidebar.addClass(tmpClassName);
				$(document).off('settings.ace.sidebar');
			}
		});
	}
	else if( (event_name == 'navbar_fixed') ) {
		var navbar = event_source ? $(event_source) : $('#navbar');
		var tmpClassName = navbar.attr('class');
		navbar.attr('class', 'navbar-fixed-top');//don't save these classes in demo
	
		//we don't use 'one' because other 'settings.ace' events could be triggered before the 'sidebar_*' one!
		$(document).on('settings.ace.navbar', function(ev, event_name) {
			if( (event_name == $event_name) ) {
				navbar.addClass(tmpClassName);
				$(document).off('settings.ace.navbar');
			}
		});
	}

 });
 */


 //check/uncheck the checkbox in settings box
 var checkbox = this;
 $(document).on('settings.ace', function(ev, event_name, event_val, event_source, save_state) {
	var checkbox = '';
	switch(event_name) {
		case 'navbar_fixed':
			checkbox = 'ace-settings-navbar';
		break;
		
		case 'sidebar_fixed':
			checkbox = 'ace-settings-sidebar';
		break;
		
		case 'breadcrumbs_fixed':
			checkbox = 'ace-settings-breadcrumbs';
		break;
		
		case 'main_container_fixed':
			checkbox = 'ace-settings-add-container';
		break;
	}
	
	if( checkbox && (checkbox = document.getElementById(checkbox)) ) {
		$(checkbox).prop('checked', event_val);

		try {
			if(save_state == true) ace.settings.saveState(checkbox, 'checked');
		} catch(e) {}
	}
 });


  ////
  ace.settingFunction = {
	navbar_fixed : function(navbar, fixed , save, chain) {
		if(ace.vars['very_old_ie']) return false;
		
		var navbar = navbar || '#navbar';
		if(typeof navbar === 'string') navbar = $(navbar).get(0);
		if(!navbar) return false;
	
		var fixed = fixed || false;
		var save = typeof save !== 'undefined' ? save : true;
		

		var event;
		$(document).trigger(event = $.Event('presettings.ace'), ['navbar_fixed' , fixed , navbar, save]);
		if (event.isDefaultPrevented()) {
			return false;
		}

	
		if(chain !== false && !fixed) {
			//unfix sidebar as well
			var sidebar = $('#sidebar');
			if(sidebar.hasClass('sidebar-fixed')) {
				ace.settingFunction.sidebar_fixed(sidebar.get(0), false, save);
			}
		}

		if(fixed) {
			$(navbar).addClass('navbar-fixed-top');
		} else {
			$(navbar).removeClass('navbar-fixed-top');
		}

		if(save) {
			ace.settings.saveState(navbar, 'class', 'navbar-fixed-top', fixed);//the 'last' boolean means whether to append this classname or to remove it from previous value			
		}

		$(document).trigger('settings.ace', ['navbar_fixed' , fixed , navbar, save]);
	},


	sidebar_fixed : function(sidebar, fixed , save, chain) {
		if(ace.vars['very_old_ie']) return false;
		
		var sidebar = sidebar || '#sidebar';
		if(typeof sidebar === 'string') sidebar = $(sidebar).get(0);
		if(!sidebar) return false;
		

		var fixed = fixed || false;
		var save = typeof save !== 'undefined' ? save : true;
		
		
		var event;
		$(document).trigger(event = $.Event('presettings.ace'), ['sidebar_fixed' , fixed , sidebar, save]);
		if (event.isDefaultPrevented()) {
			return false;
		}
		
		
		if(chain !== false) {
			if(fixed) {
				//fix navbar as well
				ace.settingFunction.navbar_fixed(null, true, save);
			}

			else {
				//unfix breadcrumbs as well
				ace.settingFunction.breadcrumbs_fixed(null, false, save);
			}
		}

		var toggler = $('#menu-toggler');
		if(fixed) {
			$(sidebar).addClass('sidebar-fixed');
			toggler.addClass('fixed');
		} else {
			$(sidebar).removeClass('sidebar-fixed');
			toggler.removeClass('fixed');
		}
		
		if( save ) {
			ace.settings.saveState(sidebar, 'class', 'sidebar-fixed', fixed);//the 'last' boolean means whether to append this classname or to remove it from previous value
			if(toggler.length != 0) ace.settings.saveState(toggler[0], 'class', 'fixed', fixed);
		}

		$(document).trigger('settings.ace', ['sidebar_fixed' , fixed , sidebar, save]);
	},
	
	//fixed position
	breadcrumbs_fixed : function(breadcrumbs, fixed , save, chain) {
		if(ace.vars['very_old_ie']) return false;

		var breadcrumbs = breadcrumbs || '#breadcrumbs';
		if(typeof breadcrumbs === 'string') breadcrumbs = $(breadcrumbs).get(0);
		if(!breadcrumbs) return false;
	
		var fixed = fixed || false;
		var save = typeof save !== 'undefined' ? save : true;
		
		
		var event;
		$(document).trigger(event = $.Event('presettings.ace'), ['breadcrumbs_fixed' , fixed , breadcrumbs, save]);
		if (event.isDefaultPrevented()) {
			return false;
		}
		
		
		if(fixed && chain !== false) {
			//fix sidebar and navbar as well
			ace.settingFunction.sidebar_fixed(null, true, save);
		}

		if(fixed) {
			$(breadcrumbs).addClass('breadcrumbs-fixed');
		} else {
			$(breadcrumbs).removeClass('breadcrumbs-fixed');
		}
		
		if( save ) {
			ace.settings.saveState(breadcrumbs, 'class', 'breadcrumbs-fixed', fixed);
		}

		$(document).trigger('settings.ace', ['breadcrumbs_fixed' , fixed , breadcrumbs, save]);
	},

	//fixed size
	main_container_fixed : function(main_container, fixed , save) {
		if(ace.vars['very_old_ie']) return false;
		
		var fixed = fixed || false;//fixed width? inside .container
		var save = typeof save !== 'undefined' ? save : true;
		
		var main_container = main_container || '#main-container';
		if(typeof main_container === 'string') main_container = $(main_container).get(0);
		if(!main_container) return false;
		
		
		var event;
		$(document).trigger(event = $.Event('presettings.ace'), ['main_container_fixed' , fixed , main_container, save]);
		if (event.isDefaultPrevented()) {
			return false;
		}
		
		
		var navbar_container = $('#navbar-container');
		if(fixed) {
			$(main_container).addClass('container');
			$(navbar_container).addClass('container');
		} else {
			$(main_container).removeClass('container');
			$(navbar_container).removeClass('container');
		}

		
		if( save ) {
			ace.settings.saveState(main_container, 'class', 'container', fixed);
			if(navbar_container.length != 0) ace.settings.saveState(navbar_container[0], 'class', 'container', fixed);
		}

		
		if(navigator.userAgent.match(/webkit/i)) {
			//webkit has a problem redrawing and moving around the sidebar background in realtime
			//so we do this, to force redraw
			//there will be no problems with webkit if the ".container" class is statically put inside HTML code.
			$('#sidebar').toggleClass('menu-min')
			setTimeout(function() {	$('#sidebar').toggleClass('menu-min') } , 10)
		}
		
		$(document).trigger('settings.ace', ['main_container_fixed', fixed, main_container, save]);
	}
	/**
	,
	sidebar_collapsed : function(sidebar, collapsed , save) {
		if(ace.vars['very_old_ie']) return false;

		var sidebar = sidebar || '#sidebar';
		if(typeof sidebar === 'string') sidebar = $(sidebar).get(0);
		if(!sidebar) return false;

		var collapsed = collapsed || false;
		var save = typeof save !== 'undefined' ? save : true;
		
		
		var event;
		$(document).trigger(event = $.Event('presettings.ace'), ['sidebar_collapsed' , collapsed , sidebar, save]);
		if (event.isDefaultPrevented()) {
			return false;
		}
		

		if(collapsed) {
			$('#sidebar').addClass('menu-min');
		} else {
			$('#sidebar').removeClass('menu-min');
		}
		
		if( save ) {
			ace.settings.saveState(sidebar, 'class', 'menu-min', collapsed);//the 'last' boolean means whether to append this classname or to remove it from previous value
		}

		$(document).trigger('settings.ace', ['sidebar_collapsed' , collapsed, sidebar, save]);
	}
	*/
  }


})(jQuery);