var PGB = {

	// Configuration_______________________________________________________________
	
	config: {
		urls: {
			districtAutocomplete: '/pgb_backend/ajax/districtAutocomplete.php',
			districtYearSelect: '/pgb_backend/ajax/districtYearSelect.php',
			benefitsSelect: '/pgb_backend/ajax/benefitsSelect.php',
			benefitsPage: '/pgb_backend/index.php'
		}
	},

	// Public Methods______________________________________________________________
	
	setupDistrictSelectForm: function(form)
	{
		form.select('select[name="distId"]').invoke('observe','change',PGB.handlers.districtSelectMenu_change);
		
		form.select('select[name="distName"]').invoke('observe','change',PGB.handlers.districtSearch_change);
		
		form.observe('submit',PGB.handlers.districtSelectForm_submit);
		
		var districtAjaxSelect = $('districtAjaxSelect');
		
		if(districtAjaxSelect)
		{
			new Ajax.Autocompleter(districtAjaxSelect, "districtAjaxOptions", PGB.config.urls.districtAutocomplete, {afterUpdateElement: PGB.handlers.districtSearch_change});
		}

	},
	
	
	
	// Event Handlers______________________________________________________________
	
	handlers: {
		reveal_click: function(event)
		{
			var element = event.element();
			var className = $w(element.className).without('reveal','revealed')[0];
			
			$$('div.'+className).invoke('toggle');
			element.toggleClassName('revealed');
			
			event.stop();
			
		},
		
		districtSelectForm_submit: function(e)
		{
			var el = $('districtAjaxSelect'), form = el.up('form');
			
			e.stop();
			
			try
			{
				var loading = form.select('div.loading');
				
				form.select('select[name="distYear"]','p.err').each(function(s){Element.remove(s);});
				
				if($F(el) != "0")
				{
					loading.invoke('show');
					
					new Ajax.Updater(el,PGB.config.urls.districtYearSelect,{
						method:'get',
						insertion: 'after',
						parameters: form.serialize(true),
						onComplete: function(){
							var s = form.select('select[name="distYear"]');
							s.invoke('observe','change',PGB.handlers.districtYearSelectMenu_change);
							
							if(s.length && s[0].options.length == 1)
							{
								s[0].hide();
								s[0].insert({before:'<p class="err">Please select your employer from the list before clicking the &quot;Log In&quot; button</p>'});
								loading.invoke('hide');
							}
							else if(s.length && s[0].options.length == 2)
							{
								s[0].hide();
								s[0].selectedIndex = 1;
								window.location=PGB.config.urls.benefitsPage+'?distYear='+$F(s[0]);
							}
							else
							{
								loading.invoke('hide');
							}
						}
					});
				}
			}
			catch(ex)
			{
			
			}
		},
		
		districtSelectMenu_change: function(e)
		{
			var el = e.element(), form = e.findElement('form');
			
			var loading = form.select('div.loading');
			
			form.select('select[name="distYear"]').each(function(s){Element.remove(s);});
			
			if($F(el) != "0")
			{
				loading.invoke('show');
				
				new Ajax.Updater(el,PGB.config.urls.districtYearSelect,{
					method:'get',
					insertion: 'after',
					parameters: form.serialize(true),
					onComplete: function(){
						loading.invoke('hide');
						
						form.select('select[name="distYear"]').invoke('observe','change',PGB.handlers.districtYearSelectMenu_change);
					}
				});
			}
		},
		
		districtSearch_change: function(e)
		{
			var el = $('districtAjaxSelect'), form = el.up('form');
			
			var loading = form.select('div.loading');
			
			form.select('select[name="distYear"]').each(function(s){Element.remove(s);});
			
			if($F(el) != "0")
			{
				loading.invoke('show');
				
				new Ajax.Updater(el,PGB.config.urls.districtYearSelect,{
					method:'get',
					insertion: 'after',
					parameters: form.serialize(true),
					onComplete: function(){
						var s = form.select('select[name="distYear"]');
						s.invoke('observe','change',PGB.handlers.districtYearSelectMenu_change);
						
						if(s.length && s[0].options.length == 2)
						{
							s[0].hide();
							s[0].selectedIndex = 1;
							window.location=PGB.config.urls.benefitsPage+'?distYear='+$F(s[0]);
						}
						else
						{
							loading.invoke('hide');
						}
					}
				});
			}
		},
		
		districtYearSelectMenu_change: function(e)
		{
			var el = e.element(), form = e.findElement('form');
			
			var loading = form.select('div.loading');
			
			window.location=PGB.config.urls.benefitsPage+'?distYear='+$F(el);
			
			/*
			form.select('select[name="benefitId"]').each(function(s){Element.remove(s);});
			
			if($F(el) != "0")
			{
				loading.invoke('show');
				
				new Ajax.Updater(el,PGB.config.urls.benefitsSelect,{
					method:'get',
					insertion: 'after',
					parameters: form.serialize(true),
					onComplete: function(){
						loading.invoke('hide');
					}
				});
			}
			*/
		}
	},
	
	
	// Startup Function____________________________________________________________
	
	startup: function()
	{
		// Bind handlers to ourself:
		
		$H(this.handlers).each(function(pair){
			this.handlers[pair[0]] = pair[1].bindAsEventListener(this)
		}.bind(this));
		
		$$('a.reveal').invoke('observe','click',this.handlers.reveal_click);
		
		$$('form.selectDistrict').each(this.setupDistrictSelectForm);
		
		// Make all links open in a new window:
		
		$$('a[href^=http://]').invoke('writeAttribute','rel','external');
		$$('a[href^=http://www.piercegroupbenefits.com/]').invoke('writeAttribute','rel');
		
		
		// remove empty rows:
		
		$$('table.removeEmpty tr').findAll(function(row)
		{
			return row.select('td').all(function(cell){
				var h = cell.innerHTML.replace(/\s*(\<br\/?>)*\s*/gi,'');
				return h=='';
			});
		}).invoke('remove');
		
		$$('ul.removeEmpty li').findAll(function(li)
		{
			var h = li.innerHTML.replace(/\s*(\<br\/?>)*\s*/g,'');
			return h=='';
		}).invoke('remove');
		
		$$('div#leftnav ul li a[href='+document.location.pathname+document.location.search+']').invoke('up').invoke('addClassName','selected');
	}
};

FastInit.addOnLoad(PGB.startup.bind(PGB));