/*
** hrefID jQuery extention
*/
$.fn.extend({ hrefId: function() { return $(this).attr('href').substr($(this).attr('href').indexOf('#')); } });

/**
 * Compact labels plugin
 */
(function(){jQuery.fn.compactize=function(){return this.each(function(){var label=$(this),input=$('#'+label.attr('for'));input.focus(function(){label.hide();}).blur(function(){if(input.val()===''){label.show();}});window.setTimeout(function(){if(input.val()!==''){label.hide();}},50);});};})();

/*
 * Scripts
 *
 */
jQuery(function($) {
 
	var Engine = {
		utils : {
			links : function(){
				$('a[rel*=external]').click(function(e){
					e.preventDefault();
					window.open($(this).attr('href'));						  
				});
			}
		},
		enhancements : {
			menu : function(){
				var triggers = $('.aside-a > ul > li > a');
				if (triggers.length === 0) {
					return;
				}
				
				var collapse = function(el){
					$(el).siblings('ul').slideUp().parent().removeClass('active');
				};
				
				var expand = function(el){
					$(el).siblings('ul').slideDown().parent().addClass('active');
				};
				
				triggers.click(function(e){
					e.preventDefault();					
					if ($(this).parent().hasClass('active')){
						collapse(this);
					}
					else {
						collapse($(this).parents('ul').find('li.active > a'));
						expand(this);
					}
				});
			},
			filter : function(){
				var triggers = $('.aside-b .filter h4');
				if (triggers.length === 0){
					return;
				}
				
				var collapse = function(el){
					$(el).siblings('div.wrapper').slideUp('fast').parent().removeClass('active');
				};
				
				var expand = function(el){
					$(el).siblings('div.wrapper').slideDown('fast').parent().addClass('active');
				};
				
				triggers.click(function(e){
					e.preventDefault();					
					if ($(this).parent().hasClass('active')){
						collapse(this);
					}
					else {						
						collapse($(this).parents('div.aside-b').find('div.active h4'));
						expand(this);
					}				
				});
			},
			filterTabs : function(){
				var triggers = $('.aside-b .tabbed .tabs a');
				var sections = $('.aside-b .tabbed .section-b');
				triggers.click(function(e){
					e.preventDefault();
					if ($(this).hasClass('active')){
						return;
					}
					
					triggers.removeClass('active');
					$(this).addClass('active');
					
					sections.hide();
					$($(this).hrefId()).show();
				});
			},
			languageSwitch : function(){
				$('.options-bar-a .languages').each(function(){
					var p = $('<p />'),
					    ul = $('<ul />');
					$(this).find('option').each(function(){
						var lang = $(this).attr('value'),
							url = $(this).attr('label'),
						    contents = '<img src="/images/flags/'+lang+'.png" alt="'+lang+'" /> ' + $(this).html();
						if ($(this).attr('selected')) {
							p.append(contents);
						}
						
						ul.append('<li><a href="'+url+'">'+contents+'</a></li>');
					});
					
					$(this).append(p,ul);
					$(this).mouseenter(function(){
						$(this).find('ul').show();
					}).mouseleave(function(){
						$(this).find('ul').hide();						
					});
				});
			},
			breadcrumbs : function(){
				$('.breadcrumbs li').mouseenter(function(){
					$(this).find('ul').show();
				}).mouseleave(function(){
					$(this).find('ul').hide();
				});				
			},
			profile : function(){
				$('.comments-a label').compactize();
				
				var toggleSection = function(e){
					e.preventDefault();
					$(this).parent().toggleClass('toggled-off');
				};
				
				$('.profile-section.toggling').each(function(){					
					$(this).find('h4').click(toggleSection).triggerHandler('click');
				});				
			},
			timetable : function(){
				
				var rows = $('table.timetable tr');
				if (rows.length === 0) {
					return;
				}
				
				var hours = [];				
				var populate = function(from, to) {
					$.each(hours,function(){
						$(this.from).val(from);
						$(this.to).val(to);
					});					
				};				
				
				var closeBoxes = rows.find('input[type=checkbox]');
				closeBoxes.click(function(e){
					var hoursTd = $(this).parent().prev();
					if ($(this).attr('checked')) {
						hoursTd.addClass('closed');
					}
					else {
						hoursTd.removeClass('closed');
					}
				});
				
				rows.each(function(){
					hours[hours.length] = { 'from' : $(this).find('select:eq(0)') , 'to' : $(this).find('select:eq(1)') };
				});


				
				$('table.timetable .apply-to-all').click(function(e){
					e.preventDefault();
					var from = $(this).parents('tr').find('select:eq(0)').val(),
					    to = $(this).parents('tr').find('select:eq(1)').val();
					
					populate(from, to);

					 // UNCOMMENT LINES BELOW TO TRIGGER BATCH UPDATE FOR CLOSED FLAG AS WELL
					closeBoxes.attr('checked',$(this).parents('tr').find('input[type=checkbox]').attr('checked'));
					closeBoxes.each(function(){
					$(this).triggerHandler('click')
					});
				});
			}	
		},
		fixes : {
			breadcrumbs : function(){
				$('.breadcrumbs').each(function(index, el){
					$(this).css('z-index',parseInt(100-index));
				});
			}		
		},
		ui : {
			accountTypes : function(){
				$('.account-types .type:has(a)').click(function(e){
					window.location = $(this).find('a').attr('href');
				}).addClass('clickable');
			},
			packages : function(){
				$('.package-a input[type="radio"]').click(function(){
					$('.package-a h4').removeClass('active');
					$(this).parent().addClass('active');
				});
				
				$('.package-b input[type="radio"]').click(function(){
					$('.package-b li').removeClass('active');
					$(this).parents('li').addClass('active');
				});				
			},
			forms : function(){		
				$('.form-a em.help').each(function(){
					var ctrl = $(this).prev();					
					$(this).click(function(e){
						ctrl.trigger('focus');
					});
					$(this).attr('for',ctrl.attr('id')).compactize();					
				});				
			},
			foldables : function(){
				$('.foldable h3').click(function(){					
					$(this).parents('.foldable').toggleClass('foldable-active');
				});
			}
		}	
	};

	Engine.utils.links();
	
	Engine.enhancements.menu();
	Engine.enhancements.filter();
	Engine.enhancements.filterTabs();
	Engine.enhancements.languageSwitch();
	
	Engine.enhancements.breadcrumbs();
	
	Engine.enhancements.profile();
	Engine.enhancements.timetable();
	
	Engine.fixes.breadcrumbs();
	
	Engine.ui.accountTypes();
	Engine.ui.packages();
	Engine.ui.forms();
	Engine.ui.foldables();
});