var Behaviour=new Native({name:"Behaviour",initialize:function(A){window.addEvent("domready",function(C){for(var B in A){this.apply(B,A[B])}}.bind(this));return this}});Behaviour.implement({sheets:{},add:function(A){window.addEvent("domready",function(C){for(var B in A){this.apply(B,A[B])}}.bind(this))},apply:function(A,C){if($type(C)=="object"){try{$$(A).each(function(D){for(var E in C){if($type(C[E])=="function"){switch(E){case"beforeload":C[E]();break;case"domready":case"load":window.addEvent(E,C[E]);break;default:D.addEvent(E,C[E]);break}}}}.bind(this));this.sheets[A]=C[A]}catch(B){}}},destroy:function(){this.empty();return null},empty:function(){for(var A in this.sheets){try{this.remove(A)}catch(B){}}return this},remove:function(A){if(this.sheets[A]){try{$$(A).each(function(C){for(var D in this.sheets[A]){if($type(this.sheets[A][D])=="function"){C.removeEvent(D,this.sheets[A][D])}}}.bind(this));this.sheets[A]=null}catch(B){}}}});String.implement({cleanQueryString:function(A){return this.split("&").filter(A||function(B){return $chk(B.split("=")[1])}).join("&")},parseQuery:function(C,B){C=$pick(C,true);B=$pick(B,true);var D=this.split(/[&;]/);var A={};if(D.length){D.each(function(F){var E=F.split("=");if(E.length&&E.length==2){A[(C)?encodeURIComponent(E[0]):E[0]]=(B)?encodeURIComponent(E[1]):E[1]}})}return A},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"")},tidy:function(){var A=this.toString();$each({"[\xa0\u2002\u2003\u2009]":" ","\xb7":"*","[\u2018\u2019]":"'","[\u201c\u201d]":'"',"\u2026":"...","\u2013":"-","\u2014":"--","\uFFFD":"&raquo;"},function(C,B){A=A.replace(new RegExp(B,"g"),C)});return A}});$extend(Browser,{getHost:function(A){A=$pick(A,window.location.href);var B=A;if(A.test("http://")){A=A.substring(A.indexOf("http://")+7,A.length);if(A.test(":")){A=A.substring(0,A.indexOf(":"))}if(A.test("/")){return A.substring(0,A.indexOf("/"))}return A}return false},getPort:function(C){C=$pick(C,window.location.href);var D=new RegExp(":([0-9]{4})");var B=D.exec(C);if(B==null){return false}else{var A=false;B.each(function(E){if($chk(parseInt(E))){A=E}})}return A},getQueryStringValue:function(B,A){try{return Browser.getQueryStringValues(A)[B]}catch(C){return null}},getQueryStringValues:function(B){var A=$pick(B,window.location.search,"").split("?")[1];if(!$chk(A)){return{}}if(A.test("#")){A=A.substring(0,A.indexOf("#"))}try{if(A){return A.parseQuery()}}catch(C){return null}return{}}});window.addEvent("domready",function(){var B=0;function A(){function C(){B++;if(B<20){A.delay(50)}}try{if(!Browser.set("QueryString",Browser.getQueryStringValues())){C()}}catch(D){C()}}A()});

/*
Script: ProgressSpinner
	Progress Spinner that sits in the middle of the element passed in.
*/
var ProgressSpinner = new Class({
	Implements				: Options,
	options					: {
		background			: '#DDF4FF',
		colour				: '#000000',
		height				: 48,
		isTransparent		: true,
		swf					: '/assets/themes/ProgressSpinner.swf',
		width				: 48
	},
	element					: null,
	swf						: null,
	swfWrapper				: null,
	initialize				: function(element, options) {
		this.element = $(element);
		this.setOptions(options);
		var coords = this.element.getCoordinates();
		this.swfWrapper = new Element('div', {
			'styles'		: {
				'background'	: this.options.background,
				'height'		: coords.height,
				'left'			: coords.left,
				'position'		: 'absolute',
				'top'			: coords.top,
				'width'			: coords.width
			}
		});
		var top = (coords.height.toInt() / 2) - (this.options.height.toInt() / 2);
		var left = (coords.width.toInt() / 2) - (this.options.height.toInt() / 2);
		var spinner = new Element('div', {
			'styles'		: {
				'left'			: left,
				'position'		: 'relative',
				'top'			: top
			}
		}).injectInside(this.swfWrapper);
		var id = (this.element.id) ? this.element.id : this.element.className;
		this.swf = new Swiff(this.options.swf, {
			container		: spinner,
			height			: this.options.height,
			id				: 'progress-' + (id ? id : 'spinner'),
			width			: this.options.width,
			params			: {
				wmode		: (this.options.isTransparent) ? 'transparent' : 'opaque'
			}
		});
		return this;
	},
	show					: function() {
		this.swfWrapper.inject($(document.body));
		return this;
	},
	hide					: function() {
		this.swfWrapper.dispose();
		return this;
	}
});

Element.implement({
	load							: function(url, options) {
		var defaultOptions = {
			updateTarget			: true
		};
		options = $extend(defaultOptions, options);
		var requestURL = url || this.get('href');
		
		var progressSpinner = new ProgressSpinner(this, {
			height					: 24,
			width					: 24
		}).show();
		this.setStyle('visibility', 'hidden');
		
		var request = new Request({
			method					: 'get',
			url						: requestURL,
			onSuccess				: function(responseText) {
				if (options.updateTarget) {
					this.set('html', responseText);
				};
				progressSpinner.hide();
				this.setStyle('visibility', 'visible');
			}.bind(this),
			onFailure				: function() {
				progressSpinner.hide();
				this.setStyle('visibility', 'visible');
			}.bind(this)
		}).send();
	}
});
