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 ) {
			// Add custom validator for the Order Medical form
			FormValidator.add('validate-smaller-than', {
				errorMsg: 'Max exceeded.',
				test: function(element, properties){
					return (element.value * 1 < properties['validate-smaller-than']);
				}
			});

			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-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);

