var Site = {
	currentFontSize: 100,
	cookieDomain: '.cancerqld.org.au',
	stateCookie: null,
	
	start: function(){
		
		MooTools.lang.setLanguage("en-US");

		// Launch-in-new-window links automagically created
		var extLinks = $$('a.external');
		if ( extLinks.length ) {
			extLinks.each(function(elem, idx) { 
				elem.setProperty('target', '_blank');
			});
		}
		
		// Safari Suckerfish 'fix'
		if ( navigator.appVersion.toLowerCase().indexOf('safari') != -1 ) {
			var navElems = $$('#suckerfishMenu0 li a');
			navElems.each(function(elem, idx) {
				elem.set('title', '');
			});
		}
		
		// Form validation automagic
		var valForms = $$('form.validate-form');
		if ( valForms.length ) {
			valForms.each(function(elem, idx) { 
				new FormValidator.Inline(elem, {
					'onFormValidate': Site.formHandler,
					'errorPrefix': ''
				});
			});
		}
		
		
		var valForms = $$('form.validate-form-custom');
		if ( valForms.length ) {
			valForms.each(function(elem, idx) { 
				elem.validator = new FormValidator(elem, {
					onFormValidate: Site.formHandler
				});
			});
		}
		
		if ($('mailing-list-form')) Site._setUpMailingList();
		
		if ($('accordion')) Site._setUpAccordion();

		if ($('toolbox-reduce')) {
			$('toolbox-reduce').addEvent("click", Site.decreaseFontSize);
		}
		if ($('toolbox-increase')) {
			$('toolbox-increase').addEvent("click", Site.increaseFontSize);
		}
		
		
		Site.stateCookie = new Hash.Cookie('qcsolCookie', {		'duration': 	60,
																'domain': 		Site.cookieDomain,
																'path': 		'/'
															});
															
		if ( $('qcsol-navigation') ) {
			Site._attachQcsolNavigation();
		}
		
	},
	
	
	formHandler: function(pass, form, submitEvent) {
		// Do anything necessary here
	},
	
	_setUpMailingList: function() {
		
		$('mailing-list-name').addEvent('focus', function() {
				if ($('mailing-list-name').value == 'Name') {
					$('mailing-list-name').value = '';
				}
			});
		$('mailing-list-name').addEvent('blur', function() {
				if ($('mailing-list-name').value == '') {
					$('mailing-list-name').value = 'Name';
				}
		});

		$('mailing-list-email').addEvent('focus', function() {
				if ($('mailing-list-email').value == 'Email') {
					$('mailing-list-email').value = '';
				}
			});
		$('mailing-list-email').addEvent('blur', function() {
				if ($('mailing-list-email').value == '') {
					$('mailing-list-email').value = 'Email';
				}
		});
		
		$('mailing-list-submit').addEvent('click', function(e){

			e.stop();

			if ($('mailing-list-form').validator.validate()) {
				$('mailing-list-form').submit(); 
			}
			
		});

	},
	
	_setUpAccordion: function() {
		var myMultipleOpenAccordion = new MultipleOpenAccordion($('accordion'), {
			togglers: $$('#accordion h3.toggler'),
			elements: $$('#accordion div.stretcher'),
			openAll: false,
			firstElementsOpen: [],
			opacity: false,
			onActive: function(toggler, element){
				toggler.setStyle('color', '#FFFFFF');
				toggler.setStyle('background-position', 'left bottom');
				Cufon.replace(toggler);
			},
			onBackground: function(toggler, element){
				toggler.setStyle('color', '#003366');
				toggler.setStyle('background-position', 'left top');
				Cufon.replace(toggler);
			}
		});		
	},

	
	increaseFontSize: function() {
		Site.currentFontSize += 10;
		$$("#content-main .content").setStyle("fontSize", Site.currentFontSize+"%");
		$$("#content-main .content").setStyle("lineHeight", Site.currentFontSize*1.5+"%");
	},
	
	
	decreaseFontSize: function() {
		Site.currentFontSize -= 10;
		$$("#content-main .content").setStyle("fontSize", Site.currentFontSize+"%");
		$$("#content-main .content").setStyle("lineHeight", Site.currentFontSize*1.5+"%");
	},
	
	
	_attachQcsolNavigation: function() {
		var togglers = $('qcsol-navigation').getElements('span.qcsol-toggler-level0');
		var stretchers = $('qcsol-navigation').getElements('ul.qcsol-nav-level0');
		
		// Show/hide resuming based on cookieness
		var display = -1;
		stretchers.each(function(elem, idx) {
			elem.level = 0;
			if ( (Site.stateCookie.get('qcsolLevel0') == idx) && 
					(Site.stateCookie.get('qcsolLevel0Id') == elem.id) ) {
				display = idx;
			}
		});
		
		// Attach our nav if everything matches up
		if ( togglers.length && stretchers.length && togglers.length == stretchers.length ) {
			new Fx.Accordion(togglers, stretchers, {	'display': 				display,
														'alwaysHide':			true,
														'returnHeightToAuto':	true,
														'onComplete': function() {
															if ( this.previous >= 0  ) {
																if ( parseInt(this.elements[this.previous].getStyle('height')) ) {
																	this.elements[this.previous].setStyle('height', '');
																	var showState = true;
																} else {
																	var showState = false;
																}
																
																// Reset child view states
																for ( var x = 1; x < 4; x++ ) {
																	Site.stateCookie.set('qcsolLevel'+x, -1);
																}
																
																if ( showState ) {
																	Site.stateCookie.set('qcsolLevel'+this.elements[this.previous].level, this.previous);
																	Site.stateCookie.set('qcsolLevel0Id', this.elements[this.previous].id);
																} else {
																	Site.stateCookie.set('qcsolLevel'+this.elements[this.previous].level, -1);
																	Site.stateCookie.set('qcsolLevel0Id', '');
																}
																Site.stateCookie.save();
															}
														}
													});
		}
												
		stretchers.each(function(ul, idx) {
			Site._attachQcsolChildNavigation(ul, 1);
		});
		
	},
	
	
	_attachQcsolChildNavigation: function(elem, level) {
		var togglers = elem.getElements('span.qcsol-toggler-level' + level);
		var stretchers = elem.getElements('ul.qcsol-nav-level' + level);
		
		// Show/hide resuming based on cookieness
		var display = -1;
		stretchers.each(function(elem, idx) {
			elem.level = level;
			if ( (Site.stateCookie.get('qcsolLevel'+level) == idx) && 
					(Site.stateCookie.get('qcsolLevel'+level+'Id') == elem.id) ) {
				display = idx;
			}
		});
		
		
		// Attach our nav if everything matches up
		if ( togglers.length && stretchers.length && togglers.length == stretchers.length ) {
			new Fx.Accordion(togglers, stretchers, {	'display': 				display,
														'alwaysHide':			true,
														'returnHeightToAuto':	true,
														'onComplete': function() {
															if ( this.previous >= 0 ) {
																if ( parseInt(this.elements[this.previous].getStyle('height')) ) {
																	this.elements[this.previous].setStyle('height', '');
																	var showState = true;
																} else {
																	var showState = false;
																}

																// Reset child view states
																for ( var x = this.elements[this.previous].level; x < 4; x++ ) {
																	Site.stateCookie.set('qcsolLevel'+x, -1);
																}
																
																if ( showState ) {
																	Site.stateCookie.set('qcsolLevel'+this.elements[this.previous].level, this.previous);
																	Site.stateCookie.set('qcsolLevel'+this.elements[this.previous].level+'Id', this.elements[this.previous].id);
																} else {
																	Site.stateCookie.set('qcsolLevel'+this.elements[this.previous].level, -1);
																	Site.stateCookie.set('qcsolLevel'+this.elements[this.previous].level+'Id', '');
																}
																Site.stateCookie.save();
															}
														}
													});
		}
												
		stretchers.each(function(ul, idx) {
			Site._attachQcsolChildNavigation(ul, level+1);
		});
		
	}
	
};

window.addEvent('domready', Site.start);
