var Application = {
	version		: '1.2',
	build		: '%build%'
};
var App = new Hash({
	beforeload						: function() {
		// Setup the 'domready' listener
		window.addEvent('domready', function() {
			this.domready();
		}.bind(this));
		// Setup the 'load' listener
		window.addEvent('load', function() {
			this.load();
		}.bind(this));
		// Run all of the 'beforeload' functions
		for (var module in this) {
			if (this[module].beforeload) {
				this[module].beforeload();
			};
		};
	},
	domready						: function() {
		// Run all of the 'domready' functions
		for (var module in this) {
			if (this[module].domready) {
				this[module].domready();
			};
		};
	},
	load							: function() {
		// Run all of the 'load' functions
		for (var module in this) {
			if (this[module].load) {
				this[module].load();
			};
		};
	}
});

/*
Script: App.APISettings
	
*/
App.APISettings = new Hash({
	domready						: function() {
		if ($('form-api-access')) {
			this.behaviour = new Behaviour(this.events);
		};
	},
	generateKey						: function(key, element) {
		element.getElement('a.generate').addClass('hide');
		element.getElement('span.developer-key').set('html', key).removeClass('hide');
		element.getParent('tr').getElement('a.revoke').getParent('span').removeClass('hide');
	},
	revokeKey						: function(element) {
		element.getParent('tr').getElement('a.generate').removeClass('hide');
		element.getParent('tr').getElement('span.developer-key').set('html', '').addClass('hide');
		element.getParent('tr').getElement('a.revoke').getParent('span').addClass('hide');
	},
	events							: {
		'td.api-key a.generate'		: {
			click					: function(event) {
				new Event(event).stop();
				var element = this.getParent('td');
				var id = this.get('rel');
				var myRequest = new Request({
					method			: 'get',
					url				: 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + '/ajax/network.access/api-access/' + id + '/',
					onComplete		: function(response) {
						App.APISettings.generateKey(response, element);
					}
				}).send('grant=true');
			}
		},
		'td.revoke a.revoke'		: {
			click					: function(event) {
				new Event(event).stop();
				var element = this.getParent('td');
				var id = this.get('rel');
				var myRequest = new Request({
					method			: 'get',
					url				: 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + '/ajax/network.access/api-access/' + id + '/',
					onComplete		: function(response) {
						App.APISettings.revokeKey(element);
					}
				}).send('revoke=true');
			}
		}
	}
});


/*
Script: App.BlogCategories
	Behaviours for the Blog Categories Page
*/
App.BlogCategories = new Hash({
	behaviour						: null,
	changes							: false,
	list							: null,
	saving							: false,
	domready						: function() {
		if ($('form-blog-categories')) {
			this.behaviour = new Behaviour(this.events);
			window.onbeforeunload = App.BlogCategories.wantsToLeave.bind(this);
		};
	},
	setupDragAndDrop				: function() {
		App.BlogCategories.list = new Sortables($('blog-categories'), {
			clone				: true,
			opacity				: 0.5,
			handle				: 'div.handle',
			onComplete			: function() {
				App.BlogCategories.changes = true;
				$('categories-sortorder').value = this.serialize();
			}
		});
	},
	wantsToLeave					: function() {
		if (this.changes == true && this.saving != true) {
			return "You haven't saved your changes yet.\nYou will be abandoning your changes.";
		};
	},
	events							: {
		'form#form-blog-categories'	: {
			submit					: function() {
				App.BlogCategories.saving = true;
			}
		},
		'.button'					: {
			click					: function(event) {
				App.BlogCategories.saving = true;
			}
		},
		'ul#blog-categories'		: {
			domready				: function() {
				App.BlogCategories.setupDragAndDrop();
			}
		},
		'a.category_add'			: {
			click					: function(event) {
				App.BlogCategories.changes = true;
				new Event(event).stop();
				var template = $('blog-categories').getElement('li.template');
				var newElement = new Element('li').set('html', template.get('html'));
				
				var count = $('blog-categories').getChildren('li').length;
				newElement.set('html', newElement.get('html').replace(/js:count/g, count));
				newElement.set('id', 'new-' + count);
				newElement.getElement('input.cat_id').value = '-1';
				
				// need to clone all the events that appear on the element
				['div.handle', 'input.input', 'input.checkbox', 'a.delete-category'].each(function(item, index) {
					// add the old events onto the new checkbox
					newElement.getElements(item).each(function(element) {
						element.cloneEvents(template.getElement(item));
					});
				});
				
				newElement.removeClass('template');
				newElement.addClass('blog-category');
				newElement.setStyle('display', 'block');
				newElement.injectInside($('blog-categories'), 'bottom');
				
				App.BlogCategories.list.detach();
				App.BlogCategories.setupDragAndDrop();
				
				$('categories-sortorder').value = App.BlogCategories.list.serialize();
				
				$('categories-visible').value = $('categories-visible').value.toInt() + 1;
				
				if ($('categories-visible').value >= 1) {
					$('no-categories').addClass('hide');
				};
			}
		},
		'a.delete-category'			: {
			click					: function(event) {
				App.BlogCategories.changes = true;
				new Event(event).stop();
				// var deleted = new Fx.Slide(this.getParent('li'));
				// deleted.slideOut();
				this.getParent('li').setStyle('display', 'none');
				this.getNext().value = '3';
				
				$('categories-visible').value = $('categories-visible').value - 1;

				if ($('categories-visible').value <= 0) {
					$('no-categories').removeClass('hide');
				};
			}
		},
		'ul#blog-categories input'	: {
			change					: function() {
				App.BlogCategories.changes = true;
			}
		}
	}
});

/*
Script: App.CustomisePlan
	
*/
App.CustomisePlan = new Hash({
	behaviour						: null,
	domready						: function() {
		if ($('plan-features')) {
			this.calculateTotal();
			if ($('bandwidth-select-count') && $('bandwidth-amount')) {
				this.calculateBandwidthAndStorage();
				if ($('bandwidth-select-count').value > 0) {
					var total = $('bandwidth-select').get('rel') * parseInt($('bandwidth-select-count').value);
					$('bandwidth-amount').set('html', total.round(2));
				};
				if ($('bandwidth-amount').get('html') == '0') {
					$('bandwidth-amount').set('html', parseFloat($('bandwidth-select').get('rel')));
				};
			};
			this.behaviour = new Behaviour(this.events);
		};
	},
	calculateBandwidthAndStorage	: function() {
		var totalBandwidth = parseFloat($('plan-bandwidth').get('rel'));
		totalBandwidth += parseFloat($('bandwidth-select-bandwidth').get('rel')) * $('bandwidth-select-count').value;
		var totalStorage = parseFloat($('plan-storage').get('rel'));
		totalStorage += parseFloat($('bandwidth-select-storage').get('rel')) * $('bandwidth-select-count').value;
		totalBandwidth = this.humanReadableByteSize(totalBandwidth.round(2));
		totalStorage = this.humanReadableByteSize(totalStorage.round(2));
		$('blocks-bandwidth-total-value').set('html', totalBandwidth);
		$('blocks-storage-total-value').set('html', totalStorage);
	},
	calculateTotal					: function() {
		var total = 0;
		$$('ul#plan-features input[type=checkbox]').each(function(element) {
			if (element.checked) {
				var value = element.get('rel').match(/(-|-\$)?(\d+(,\d{3})*(\.\d{1,})?|\.\d{1,})/g, '');
				if (value != null) {
					value = value[0].replace(/[^0-9.\-]/g, '');
					if (element.get('id') == 'bandwidth-select') {
						value = value * parseInt($('bandwidth-select-count').value);
					};
					total += parseFloat(value, 10);
				};
			};
		});
		$$('ul#plan-features input[type=hidden]').each(function(element) {
			var value = element.get('rel').match(/(-|-\$)?(\d+(,\d{3})*(\.\d{1,})?|\.\d{1,})/g, '');
			if (value != null) {
				value = value[0].replace(/[^0-9.\-]/g, '');
				total += parseFloat(value, 10);
			};
		});
		$('order-total-value').set('html', total.round(2));
	},
	humanReadableByteSize			: function(size, type) {
		type = type || 'MB';
		var oneByte = 1000;
		var totalBytes = size;
		if (type != 'B') {
			switch (type) {
				case 'KB':
					totalBytes = size * Math.pow(oneByte, 1);
					break;
				case 'MB':
					totalBytes = size * Math.pow(oneByte, 2);
					break;
				case 'GB':
					totalBytes = size * Math.pow(oneByte, 3);
					break;
				case 'TB':
					totalBytes = size * Math.pow(oneByte, 4);
					break;
				case 'PB':
					totalBytes = size * Math.pow(oneByte, 5);
					break;
				case 'EB':
					totalBytes = size * Math.pow(oneByte, 6);
					break;
				case 'ZB':
					totalBytes = size * Math.pow(oneByte, 7);
					break;
				case 'YB':
					totalBytes = size * Math.pow(oneByte, 8);
					break;
			};
		};
		var filesizename = [' B', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB'];
		var s1 = Math.floor(Math.log(totalBytes) / Math.log(oneByte));
		var s2 = (totalBytes / Math.pow(oneByte, s1)).round(3);
		return (s2 > 0) ? s2 + filesizename[s1] : 0;
	},
	events							: {
		'ul#plan-features input[type=checkbox]'		: {
			click					: function() {
				if (this.get('id') == 'bandwidth-select') {
					if (this.checked) {
						if ($('bandwidth-select-count').value == 0) {
							$('bandwidth-select-count').value = 1;
						};	
					} else {
						$('bandwidth-select-count').value = 0;
					};
				};
				App.CustomisePlan.calculateTotal();
				if ($('bandwidth-select-count') && $('bandwidth-amount')) {
					App.CustomisePlan.calculateBandwidthAndStorage();
					if (this.get('id') == 'bandwidth-select') {
						var total = $('bandwidth-select').get('rel') * parseInt($('bandwidth-select-count').value);
						$('bandwidth-amount').set('html', total.round(2));
					};
					if ($('bandwidth-amount').get('html') == '0') {
						$('bandwidth-amount').set('html', parseFloat($('bandwidth-select').get('rel')));
					};
				};
			}
		},
		'ul#plan-features input#bandwidth-select-count' : {
			blur					: function() {
				this.value = parseInt(parseFloat(this.value));
				if (this.value <= 0) {
					$('bandwidth-select').checked = false;
					this.value = 0;
				};
				if (!$('bandwidth-select').checked && this.value > 0) {
					$('bandwidth-select').checked = true;
				};
				if (this.value > 50) {
					alert('Please note that you can only have a maximum of 50 bandwidth and storage blocks.');
					this.value = 50;
				};
				App.CustomisePlan.calculateTotal();
				App.CustomisePlan.calculateBandwidthAndStorage();
				if ($('bandwidth-select-count').value > 0) {
					var total = $('bandwidth-select').get('rel') * parseInt($('bandwidth-select-count').value);
					$('bandwidth-amount').set('html', total.round(2));
				};
				if ($('bandwidth-amount').get('html') == '0') {
					$('bandwidth-amount').set('html', parseFloat($('bandwidth-select').get('rel')));
				};
			}
		}
	}
});

/*
Script: App.HomepageWidgets
	
*/
App.HomepageWidgets = new Hash({
	behaviour						: null,
	changes							: false,
	list							: null,
	saving							: false,
	domready						: function() {
		if ($('installed-widgets') && $('available-widgets')) {
			this.behaviour = new Behaviour(this.events);
			window.onbeforeunload = App.HomepageWidgets.wantsToLeave.bind(this);
		};
	},
	setupDragAndDrop				: function() {
		App.HomepageWidgets.list = new Sortables($('installed-widgets'), {
			clone				: true,
			opacity				: 0.5,
			handle				: 'div.handle',
			onComplete			: function() {
				App.HomepageWidgets.changes = true;
				$('widget-sortorder').value = this.serialize();
			}
		});
	},
	wantsToLeave					: function() {
		if (this.changes == true && this.saving != true) {
			return "You haven't saved your changes yet.\nYou will be abandoning your changes.";
		};
	},
	events							: {
		'form#form-homepage-widgets': {
			submit					: function() {
				App.HomepageWidgets.saving = true;
			}
		},
		'.button'					: {
			click					: function(event) {
				App.HomepageWidgets.saving = true;
			}
		},
		'ul#installed-widgets'		: {
			domready				: function() {
				App.HomepageWidgets.setupDragAndDrop();
			}
		},
		'ul#available-widgets li'	: {
			click					: function(event) {
				new Event(event).stop();
				
				if (this.hasClass('enabled') && !this.hasClass('disabled')) {
					App.HomepageWidgets.changes = true;
					
					var item = JSON.decode(this.get('rel'));
					if (item.multiple != 1) {
						this.removeClass('enabled');
						this.addClass('disabled');
					};
					
					var template = this.clone();
					var count = $('installed-widgets').getChildren('li').length + 1;
					
					template.set('id', 'new-' + count);
					template.set('html', template.get('html').replace(/js:count/g, count));
					
					template.injectInside($('installed-widgets'), 'bottom');
					$('widget-sortorder').value = App.HomepageWidgets.list.serialize();
					
					// need to clone all the events that appear on the element
					['a.delete-widget'].each(function(item, index) {
						// add the old events onto the new checkbox
						template.getElements(item).each(function(element) {
							element.cloneEvents($('installed-widgets').getElement('li').getElement(item));
						});
					});
					App.HomepageWidgets.list.detach();
					App.HomepageWidgets.setupDragAndDrop();
					
					$('widget-visible').value = $('widget-visible').value.toInt() + 1;
					
					if ($('widget-visible').value >= 1) {
						$('no-widgets').addClass('hide');
					};
				};
			}
		},
		'a.delete-widget'			: {
			click					: function(event) {
				App.HomepageWidgets.changes = true;
				new Event(event).stop();
				// var deleted = new Fx.Slide(this.getParent('li'));
				// deleted.slideOut();
				this.getParent('li').setStyle('display', 'none');
				this.getNext().value = '3';
				
				var item = JSON.decode(this.getParent('li').get('rel'));
				if (item.multiple != 1) {
					var icon = $('available-widgets').getElement('li.' + item.class_name);
					icon.addClass('enabled');
					icon.removeClass('disabled');
				};
				
				$('widget-visible').value = $('widget-visible').value - 1;
				
				if ($('widget-visible').value <= 0) {
					$('no-widgets').removeClass('hide');
				};
			}
		},
		'ul#installed-widgets input': {
			change					: function() {
				App.HomepageWidgets.changes = true;
			}
		}
	}
});

/*
Script: App.LanguageSettings
  
*/
App.LanguageSettings = new Hash({
	behaviour						: null,
	domready						: function() {
		if ($('language-list')) {
			this.behaviour = new Behaviour(this.events);
		};
	},
	setupListener					: function() {
		$$('div#language-list input').each(function(element) {
			element.addEvent('change', function(event) {
				var langID = this.getParent('tr').get('rel');
				var type = $(this.getParent('tr').get('id') + '-type').value;
				var name = $(this.getParent('tr').get('id') + '-name').value;
				var baseLang = $('attribs-language').value;
				if ((this.get('name') == 'type' || this.get('name') == 'name' || this.get('name') == 'body') && this.value != '') {
					App.LanguageSettings.updateLanguage(langID, type, name, baseLang, this);
				} else if (this.get('name') == 'singular' || this.get('name') == 'plural') {
					App.LanguageSettings.updateLanguage(langID, type, name, baseLang, this);
				} else {
					alert('You must not have a blank value');
				}
			});
		});
		$$('div#language-list textarea').each(function(element) {
			element.addEvent('change', function(event) {
				var langID = this.getParent('tr').get('rel');
				var type = $(this.getParent('tr').get('id') + '-type').value;
				var name = $(this.getParent('tr').get('id') + '-name').value;
				var baseLang = $('attribs-language').value;
//alert(langID +' '+ type +' '+ name +' '+ baseLang)
				if ((this.get('name') == 'type' || this.get('name') == 'name' || this.get('name') == 'body') && this.value != '') {
					App.LanguageSettings.updateLanguage(langID, type, name, baseLang, this);
				} else if (this.get('name') == 'singular' || this.get('name') == 'plural') {
					App.LanguageSettings.updateLanguage(langID, type, name, baseLang, this);
				} else {
					alert('You must not have a blank value');
				}
			});
		});
	},
	updateLanguage					: function(id, type, name, baseLang, element, params) {
		var jsonObject = null;
		if (!params) {
			jsonObject = new Object();
			jsonObject[element.name] = element.value;
		} else {
			jsonObject = params;
		};

		var json = JSON.encode(jsonObject);

		var myRequest = new Request.JSON({
			url				: $('language-save-url').value,
			onComplete		: function(responseJSON, responseHTML) {

				this.updateRowIDs(element, responseJSON);

				var opacityEffect = new Fx.Tween(element.getParent('tr'), {
					duration				: 'short',
					link					: 'chain'
				});
				opacityEffect.start('opacity', 1, 0.3).start('opacity', 0.3, 1);
				
				var colourEffect = new Fx.Tween($(element), {
					duration				: 'long',
					link					: 'chain'
				});
				colourEffect.start('background-color', '#FFFFFF', '#C6D880').start('background-color', '#C6D880', '#FFFFFF');
				
				var coords = element.getCoordinates();
				var temp = new Asset.image(window['Env']['static_url'] + 'icons/16/71.png').setStyles({
					'left'					: coords.left + coords.width - 16 - 5,
					'margin-top'			: '8px',
					'position'				: 'absolute',
					'top'					: coords.top
				}).injectInside($(document.body));
				
				// Remove the Image after 2 seconds
				(function() {
					temp.fade(0);
					temp.destroy.delay(1000);
				}).delay(2000);
			}.bind(this)
		}).post({'id' : id, 'type' : type, 'name' : name, 'baseLang' : baseLang, 'lang' : json});
	},
	addLanguage						: function() {
		if ($('add-name').value != '' && $('add-type').value != '' && $('add-body').value != '' && $('add-lang').value != '') {
			var json = {
				body					: $('add-body').value,
				lang					: $('add-lang').value,
				name					: $('add-name').value,
				singular				: $('add-singular').value,
				plural					: $('add-plural').value,
				type					: $('add-type').value
			};
			this.updateLanguage('-1', null, json);
		
			$('add-body').value = '';
			$('add-name').value = '';
			$('add-singular').value = '';
			$('add-plural').value = '';
			$('add-type').value = '';
		};
	},
	updateRowIDs					: function(element, responseJSON) {
		if (element.getParent('tr').get('id').test("NEW")) {
			var elem = element.getParent('tr');
			var elemID = elem.get('id');
			var id = elem.get('id').replace(/NEW/g, responseJSON.id);
			var rel = elem.get('rel').replace(/NEW/g, responseJSON.id);
			elem.set('id', id);
			elem.set('rel', rel);
			
			var inputs = elem.getElements('input');
			inputs.each(function(input) {
				input.set('id', input.get('id').replace(/NEW/g, responseJSON.id));
			});
			var labels = elem.getElements('label');
			labels.each(function(label) {
				label.set('for', label.get('for').replace(/NEW/g, responseJSON.id));
			});
		};
	},
	events							: {
		'form#form-language-search'	: {
			submit					: function(event) {
				new Event(event).stop();
				var element = this;
				
				var coords = $('language-list').getCoordinates();
				
				var progressSpinner = new ProgressSpinner('language-list', { height: 32, width: 32 });
				progressSpinner.swfWrapper.getElement('div').setStyle('top', '20px');
				progressSpinner.show();
				
				var myRequest = new Request({
					url				: element.action,
					onComplete		: function(response) {
						$('language-list').set('html', response);
						App.LanguageSettings.setupListener();
						progressSpinner.hide();
					}
				}).get({'kw' : $('language-search').value});
			}
		},
		'a#add-new-language'		: {
			click					: function(event) {
				new Event(event).stop();
				App.LanguageSettings.addLanguage();
			}
		}
	}
});

/*
Script: App.NewsFeeds
	Behaviours for the RSS News Feeds Page
*/
App.NewsFeeds = new Hash({
	behaviour						: null,
	changes							: false,
	list							: null,
	saving							: false,
	domready						: function() {
		if ($('form-news-feeds')) {
			this.behaviour = new Behaviour(this.events);
			window.onbeforeunload = App.NewsFeeds.wantsToLeave.bind(this);
		};
	},
	setupDragAndDrop				: function() {
		App.NewsFeeds.list = new Sortables($('news-feeds'), {
			clone				: true,
			opacity				: 0.5,
			handle				: 'div.handle',
			onComplete			: function() {
				App.NewsFeeds.changes = true;
				$('feeds-sortorder').value = this.serialize();
			}
		});
	},
	wantsToLeave					: function() {
		if (this.changes == true && this.saving != true) {
			return "You haven't saved your changes yet.\nYou will be abandoning your changes.";
		};
	},
	events							: {
		'form#form-news-feeds'		: {
			submit					: function() {
				App.NewsFeeds.saving = true;
			}
		},
		'.button'					: {
			click					: function(event) {
				App.NewsFeeds.saving = true;
			}
		},
		'ul#news-feeds'				: {
			domready				: function() {
				App.NewsFeeds.setupDragAndDrop();
			}
		},
		'select.feed-type'			: {
			change					: function() {
				App.NewsFeeds.changes = true;
				if (this.value == '1') {
					this.getParent('div.feed').getElements('label')[1].set('html', 'URL');
				} else {
					this.getParent('div.feed').getElements('label')[1].set('html', 'Keyword');
				};
			}
		},
		'a.feed_add'				: {
			click					: function(event) {
				App.NewsFeeds.changes = true;
				new Event(event).stop();
				var template = $('news-feeds').getElement('li.template');
				var newElement = new Element('li').set('html', template.get('html'));
				
				var count = $('news-feeds').getChildren('li').length;
				newElement.set('html', newElement.get('html').replace(/js:count/g, count));
				newElement.set('id', 'new-' + count);
				newElement.getElement('input.feed_id').value = '-1';
				
				// need to clone all the events that appear on the element
				['div.handle', 'input.input', 'input.checkbox', 'select.feed-type', 'a.delete-feed'].each(function(item, index) {
					// add the old events onto the new checkbox
					newElement.getElements(item).each(function(element) {
						element.cloneEvents(template.getElement(item));
					});
				});
				
				newElement.removeClass('template');
				newElement.addClass('news-feed');
				newElement.setStyle('display', 'block');
				newElement.injectInside($('news-feeds'), 'bottom');
				
				App.NewsFeeds.list.detach();
				App.NewsFeeds.setupDragAndDrop();
				
				$('feeds-sortorder').value = App.NewsFeeds.list.serialize();
				
				$('news-feeds-visible').value = $('news-feeds-visible').value.toInt() + 1;

				if ($('news-feeds-visible').value >= 1) {
					$('no-news-feeds').addClass('hide');
				};
			}
		},
		'a.delete-feed'				: {
			click					: function(event) {
				App.NewsFeeds.changes = true;
				new Event(event).stop();
				// var deleted = new Fx.Slide(this.getParent('li'));
				// deleted.slideOut();
				this.getParent('li').setStyle('display', 'none');
				this.getNext().value = '3';
				
				$('news-feeds-visible').value = $('news-feeds-visible').value - 1;

				if ($('news-feeds-visible').value <= 0) {
					$('no-news-feeds').removeClass('hide');
				};
			}
		},
		'ul#news-feeds input'		: {
			change					: function() {
				App.NewsFeeds.changes = true;
			}
		}
	}
});

/*
Script: App.ProfileQuestions
	Behaviours for the Profile Questions Page
*/
App.ProfileQuestions = new Hash({
	behaviour						: null,
	changes							: false,
	list							: null,
	saving							: false,
	domready						: function() {
		if ($('form-profile-questions')) {
			this.behaviour = new Behaviour(this.events);
			window.onbeforeunload = App.ProfileQuestions.wantsToLeave.bind(this);
		};
	},
	setupDragAndDrop				: function() {
		App.ProfileQuestions.list = new Sortables($('custom-questions'), {
			clone				: true,
			opacity				: 0.5,
			handle				: 'div.handle',
			onComplete			: function() {
				App.ProfileQuestions.changes = true;
				$('questions-sortorder').value = this.serialize();
			}
		});
	},
	wantsToLeave					: function() {
		if (this.changes == true && this.saving != true) {
			return "You haven't saved your changes yet.\nYou will be abandoning your changes.";
		};
	},
	events							: {
		'form#form-profile-questions'	: {
			submit					: function() {
				App.ProfileQuestions.saving = true;
			}
		},
		'.button'					: {
			click					: function(event) {
				App.ProfileQuestions.saving = true;
			}
		},
		'ul#custom-questions'		: {
			domready				: function() {
				App.ProfileQuestions.setupDragAndDrop();
			}
		},
		'select.question-type'		: {
			change					: function() {
				App.ProfileQuestions.changes = true;
				var answers = $$('ul#custom-questions').getElement('li#' + this.get('rel') + ' div.options div.answers');
				if (this.value == '2' || this.value == '3' || this.value == '4') {
					answers.setStyle('display', 'block');
				} else {
					answers.setStyle('display', 'none');
				};
				// detect changing between checkbox and radio/dropdown
				if (this.value == '4') {
					answers.getElement('ul').getElements('li.answer')[0].each(function(item, index) {
						var radio = item.getElement('input.radio');
						radio.addClass('hide');
						radio.set('name', '');
						var check = item.getElement('input.check');
						check.removeClass('hide');
						check.set('name', check.get('id') + '[' + index + ']');
					});
				} else {
					answers.getElement('ul').getElements('li.answer')[0].each(function(item, index) {
						var radio = item.getElement('input.radio');
						radio.removeClass('hide');
						radio.set('name', radio.get('id'));
						radio.set('value', index);
						var check = item.getElement('input.check');
						check.addClass('hide');
						check.set('name', '');
					});
				};
			}
		},
		'a.question_add'			: {
			click					: function(event) {
				// App.ProfileQuestions.changes = true;
				new Event(event).stop();
				var template = $('custom-questions').getElement('li.template');
				var newElement = new Element('li').set('html', template.get('html'));
				
				var count = $('custom-questions').getChildren('li').length;
				newElement.set('html', newElement.get('html').replace(/js:count/g, count));
				newElement.set('id', 'new-' + count);
				newElement.getElement('input.question_id').value = '-1';
				
				// need to clone all the events that appear on the element
				['div.handle', 'input.input', 'select.question-type', 'input.checkbox',
				'input.radio', 'input.check', 'img.answer-add', 'img.answer-delete', 'a.delete-question'].each(function(item, index) {
					// add the old events onto the new checkbox
					newElement.getElements(item).each(function(element) {
						element.cloneEvents(template.getElement(item));
					});
				});
				
				newElement.removeClass('template');
				newElement.addClass('custom-question');
				newElement.setStyle('display', 'block');
				newElement.injectInside($('custom-questions'), 'bottom');
				
				App.ProfileQuestions.list.detach();
				App.ProfileQuestions.setupDragAndDrop();
				
				$('questions-sortorder').value = App.ProfileQuestions.list.serialize();
				
				$('questions-visible').value = $('questions-visible').value.toInt() + 1;

				if ($('questions-visible').value >= 1) {
					$('no-questions').addClass('hide');
				};
			}
		},
		'img.answer-add'			: {
			click					: function(event) {
				App.ProfileQuestions.changes = true;
				new Event(event).stop();
				var count = this.getParent('ul').getChildren('li').length - 1;
				var template = this.getParent('ul').getElement('li.question-options-template');
				var newElement = new Element('li').set('html', template.get('html'));
				newElement.getElement('img.answer-add').cloneEvents(template.getElement('img.answer-add'));
				newElement.getElement('img.answer-delete').cloneEvents(template.getElement('img.answer-delete'));
				newElement.getElement('input.text').set('name', newElement.getElement('input.text').get('id') + '[]');
				
				// work out whether we add a checkbox or a radio button
				if ($('form-fieldtype_id[' + this.get('rel') + ']').value == '4') {
					var input = newElement.getElement('input.check');
					input.removeClass('hide');
					input.set('name', input.get('id') + '[' + count + ']');
				} else {
					var input = newElement.getElement('input.radio');
					input.removeClass('hide');
					input.set('name', input.get('id'));
					input.set('value', this.getParent('ul').getElements('li.answer').length);
				};
				newElement.addClass('answer');
				newElement.removeClass('question-options-template');
				newElement.setStyle('display', 'block');
				newElement.injectInside(this.getParent('ul'), 'bottom');
			}
		},
		'img.answer-delete'			: {
			click					: function(event) {
				App.ProfileQuestions.changes = true;
				new Event(event).stop();
				if (this.getParent('ul').getChildren('li').length > 2) {
					this.getParent('li').destroy();
				} else {
					this.getPrevious().getPrevious().value = '';
				};
			}	
		},
		'a.delete-question'			: {
			click					: function(event) {
				App.ProfileQuestions.changes = true;
				new Event(event).stop();
				// var deleted = new Fx.Slide(this.getParent('li'));
				// deleted.slideOut();
				this.getParent('li').setStyle('display', 'none');
				this.getNext().value = '3';
				
				$('questions-visible').value = $('questions-visible').value - 1;

				if ($('questions-visible').value <= 0) {
					$('no-questions').removeClass('hide');
				};
			}
		},
		'ul#custom-questions input'	: {
			change					: function() {
				App.ProfileQuestions.changes = true;
			}
		}
	}
});


App.Translate = new Hash({
	behaviour						: null,
	domready						: function() {
		this.behaviour = new Behaviour(this.events);
	},
	events :
	{
        '.go_translate' : 
        { 
			click : function(element) 
			{
		        var id = findParamInClass('id', this);
		        $(id).getNext().addClass('loading');
			    
		        var content = '<div class="left five translate">';
		        var body = '';
		        if($(id+':body'))
		        {
		            body = $(id+':body').innerHTML;
		        }
                content += '<textarea id="' + id +':body">' + body + '</textarea>'; 
		        content += '</div>';
		        if($(id+':singular_default') || $(id+':singular'))
                {
                    content += '<div class="left five singular"><label>Singular/Secondary: </label><input id="' + id+':singular" type="text" value="';
		            if($(id+':singular'))
		            {
		                content += $(id+':singular').innerHTML;
		            }
		            content += '"/></div>';

	            }
	            if($(id+':plural_default') || $(id+':plural'))
		        {
		            content += '<div class="left five plural"><label>Plural/Tertiary: </label><input id="' + id+':plural" type="text" value="';
    		        if($(id+':plural'))
    		        {
    		            content += $(id+':plural').innerHTML;
    		        }
    		        content += '"/></div>';

		        }
		        content += '<div class="buttons left"><button class="button translation_submit" type="submit">Translate</button><button class="button cancel" type="cancel">Cancel</button></div>';
			    $(id).innerHTML = content;
			    $(id).getNext().removeClass('loading');
			    App.Translate.domready();
            }
		},
		'button.search' : 
        { 
			click : function() 
			{
                var input = this.getParent().getPrevious();
                input.getProperty('alt');
                var lang = findParamInClass('lang', $('main-content'));
                var url = 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + '/network.language/translate/'+ lang + '/';
                
                if(input.getProperty('alt'))
                {
                    url += input.getProperty('alt') + '/';
                }
                window.location = url + input.getProperty('value');
            }
		},
		'input.search'  :
		{
		    keydown : function(e) {
               switch(new Event(e).code) {      
                 case Event.Keys.enter:
                     var input = this;
                     input.getProperty('alt');
                     var lang = findParamInClass('lang', $('main-content'));
                     var url = 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + '/network.language/translate/'+ lang + '/';

                     if(input.getProperty('alt'))
                     {
                         url += input.getProperty('alt') + '/';
                     }
                     window.location = url + input.getProperty('value');
                   break;
               }
            }
		},
		'button.cancel' : 
        { 
			click : function(element)
			{
			    var id = findParamInClass('rowid', this.getParent().getParent());
			    var elId = this.getParent().getParent().getProperty('id');
			    var lang = findParamInClass('lang', $('main-content'));
			    var body = $(elId+':body').getProperty('value');
		        var url = '/ajax/admin/translate/'+ lang + '/?id='+ id + '&key='+ elId + '&state=cancel';
			    
			    new Request({
			        method: 'post',
					url				: 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + url,
					onComplete		: function(responseText) {
    					$(elId).innerHTML=responseText;
    					$(elId).getNext().removeClass('loading');
    					App.Translate.domready();
    				}
				}).send();
		    }
		},
		'button.translation_submit'	:
		{ 
			click : function(element)
			{
			    var id = findParamInClass('rowid', this.getParent().getParent());
			    var elId = this.getParent().getParent().getProperty('id');
			    var lang = findParamInClass('lang', $('main-content'));
			    var body = $(elId+':body').getProperty('value');
		        var url = '/ajax/admin/translate/'+ lang + '/?id='+ id + '&key='+ elId + '&body='+ encodeURIComponent(body);
			    
			    $(elId).getNext().addClass('loading');			    
			    if($(elId+':singular'))
			    {
			        var singular = $(elId+':singular').getProperty('value');
    		        url += '&singular='+encodeURIComponent(singular);
    		        dbg(singular);  
			    }
                if($(elId+':plural'))
			    {
			        var plural = $(elId+':plural').getProperty('value');
    		        url += '&plural='+encodeURIComponent(plural);
    		        dbg(plural);
    		    }
    		    	  alert('fdasd')
			    new Request({
			        method: 'post',
					url				: 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + url,
					onComplete		: function(responseText) {
    					$(elId).innerHTML=responseText;
    					$(elId).getNext().removeClass('loading');
    					App.Translate.domready();
    				}
				}).send();
		    }
		}
	}	
});

/*
Script: App.Rules
	Global Behaviours
*/
App.Rules = new Hash({
	behaviour						: null,
	domready						: function() {
		this.behaviour = new Behaviour(this.events);
	},
	events							: {
		'button'					: {
			click					: function(event) {
				if (this.hasClass('cancel')) {
					new Event(event).stop();
					document.location = 'http://' + window["Env"]["admin_url"] + '/' + window["Env"]["site_id"] + '/home';
				};
			}
		},
		'a#network-check-domain'	: {
			click					: function(event) {
				new Event(event).stop();
				var url = $('network-custom-domain').get('value');
				new Request.JSON({
					url				: 'http://' + window['Env']['admin_url'] + '/' + window['Env']['site_id'] + '/action/check_domain/' + url,
					onComplete		: function(responseJSON) {
						var string = 'Status of “' + url + '”\n\n';
						if (responseJSON.result == 'true') {
							string += 'This domain is configured correctly.\n\n';
							string += 'If you don\'t see your site when you visit the domain in your browser, the DNS record might need more time to propagate. This process can take up to 72 hours.';
							alert(string);
						} else {
							if (responseJSON.dns != url) {
								string += 'This domain\'s A-record is not pointing to SocialGO. It is currently set to “' + responseJSON.dns + '”.\n\n';
								string += 'Please point the domain\'s A-record (IP address) to ' + responseJSON.socialgo;
							} else {
								string += 'This domain does not appear to exist.\n\nPlease make sure you typed in the correct domain name.';
							}
							alert(string);
						};
					}
				}).get();
			}
		},
		'select#change-role-select-top'	: {
			change					: function() {
				$('change-role-select-bottom').value = this.value;
			}
		},
		'select#change-role-select-bottom'	: {
			change					: function() {
				$('change-role-select-top').value = this.value;
			}
		},
		'select#form-payment_type'	: {
			change					: function() {
				switch (this.value) {
					case '_xclick-subscriptions':
						$('charge-duration').setStyle('display', 'block');
						break;
					case '_xclick':
					$('charge-duration').setStyle('display', 'none');
						break;
				}
			}
		},
		'div#invoice-list tr'		: {
			click					: function() {
				if (this.get('rel') != '' && this.get('rel') != null) {
					window.location += '/' + this.get('rel');
				};
			}
		},
		'form#form-reported-list tr': {
			click					: function() {
				if (this.get('rel') != '' && this.get('rel') != null) {
					window.location = 'http://' + window['Env'].admin_url + '/' + window['Env'].site_id + '/network.moderate/reported/content/' + this.get('rel');
				};
			}
		},
		'#current-site-dropdown'	: {
			change					: function() {
				document.location = '/' + this.value + '/home';
			}
		},
		'input#vat-registered'		: {
			click					: function() {
				if (this.checked) {
					$('vat-information').setStyle('display', 'block');
				} else {
					$('vat-information').setStyle('display', 'none');
				};
			}
		},
		'input#form-select-all'		: {
			click					: function() {
				var element = this;
				this.getParent('table').getElements('td.select input[type=checkbox]').each(function(elem) {
					if (element.checked) {
						elem.checked = true;
					} else {
						elem.checked = false;
					};
				});
			}
		},
		'a.toggle-tinyMCE'			: {
			load					: function() {
				$$('a.toggle-tinyMCE').each(function(element) {
					var showTinyMCE = Cookie.read('showTinyMCE_' + element.get('rel'));
					showTinyMCE = (showTinyMCE == null) ? false : showTinyMCE;
					if (showTinyMCE == 'true') {
						tinyMCE.execCommand('mceAddControl', false, element.get('rel'));
					};
					Cookie.write('showTinyMCE_' + element.get('rel'), showTinyMCE, { duration: 365 });
				});
			},
			click					: function() {
				if (!tinyMCE.getInstanceById(this.get('rel'))) {
					Cookie.write('showTinyMCE_' + this.get('rel'), 'true', { duration: 365 });
					tinyMCE.execCommand('mceAddControl', false, this.get('rel'));
				} else {
					Cookie.write('showTinyMCE_' + this.get('rel'), 'false', { duration: 365 });
					tinyMCE.execCommand('mceRemoveControl', false, this.get('rel'));
				};
			}
		},
		'form#form-member-list button'	: {
			click					: function(event) {
				new Event(event).stop();
				$('form-member-action').value = this.value;
				$('form-member-list').submit();
			}
		},
		'a.clear-history-link'		: {
			click					: function(event) {
				new Event(event).stop();
				var url = (this.get('href').replace('/action/', '/ajax/'));
				this.load(url, { updateTarget: false });
			  this.innerHTML = '<img width="24" height="24" alt="Cleared" src="http://static.socialgo.com/icons/24/71.png"/>';
			}
		},
		'input#search-members'		: {
			blur					: function() {
				if (this.value == '') {
					this.value = this.getProperty('rel');
				};
			},
			focus					: function() {
				if (this.value == this.getProperty('rel')) {
					this.value = '';
				};
			}
		},
		'a#change-default-language'	: {
			click					: function() {
				$('form-network-language').toggleClass('hide');
			}
		},
		'input#access-code-bool'	: {
			click					: function() {
				if (this.checked) {
					$('access-code').focus();
				} else {
					$('access-code').value = '';
				};
			}
		}
	}
});

/*
Script: App.SlidingTabs
	Mimics Coda's sliding tabs
*/
App.SlidingTabs = new Class({
	Implements				: [Events, Options],
	options					: {
		activeButtonClass	: 'active',
		activationEvent		: 'click',
		animateHeight		: true,
		effects				: {
			duration		: 300
		},
		startSection		: false,
		wrap				: true,
		callBacks			: {
			onLoad			: $empty,
			onBeforeChange	: $empty,
			onChange		: $empty
		}
	},
	buttons					: null,
	content					: null,
	current					: null,
	frame					: null,
	fx						: null,
	heightFx				: null,
	navigation				: null,
	sections				: null,
	initialize				: function(element, navigation, options) {
		this.frame = $(element);
		this.content = this.frame.getFirst();
		this.sections = this.content.getChildren();
		
		if (navigation) {
			this.navigation = $(navigation).getChildren();
		};
		this.setOptions(options);
		
		this.fx = new Fx.Scroll(this.frame, this.options.effects);
		//this.heightFx = this.frame.effect('height', this.options.effects);
		this.current = (this.options.startSection) ? this.sections.indexOf($(this.options.startSection)) : 0;
		if (navigation) {
			this.navigation[this.current].addClass(this.options.activeButtonClass);
		};
		if (this.options.startSection) {
			this.fx.toElement(this.options.startSection);
		};
		if (navigation) {
			this.navigation.each(function(elem) {
				elem.addEvent(this.options.activationEvent, function(event) {
					new Event(event).stop();
					
					var hash = window.location.href.replace(window.location.hash, '') + this.navigation[this.current].getElement('a').get('href');
					
					if (event.target != hash) {
						this.changeTo(this.sections[this.navigation.indexOf(elem)])
					};
				}.bind(this));
			}.bind(this));
		};
		if (this.options.animateHeight) {
			//this.heightFx.set(this.sections[this.current].offsetHeight);
		};
		this.options.callBacks['onLoad']();
	},
	changeTo				: function(element, animate) {
		this.options.callBacks['onBeforeChange']();
		if ($type(element) == 'number') {
			element = this.sections[element - 1];
		};
		if (!$defined(animate)) {
			animate = true;
		};
		var event = {
			animateChange	: animate,
			cancel			: false,
			target			: $(element)
		};
		this.fireEvent('change', event);
		if (event.cancel == true) {
			return;
		};
		if (this.navigation) {
			this.navigation[this.current].removeClass(this.options.activeButtonClass);
		};
		this.current = this.sections.indexOf($(event.target));
		if (this.navigation) {
			this.navigation[this.current].addClass(this.options.activeButtonClass);
		};
		if (event.animateChange && !Browser.Engine.trident) {
			this.fx.toElement(event.target);
		} else {
			this.frame.scrollTo(this.current * this.frame.offsetWidth.toInt(), 0);
		};
		if (this.options.animateHeight) {
			//this.heightFx.start(this.sections[this.current].offsetHeight);
		};
		this.options.callBacks['onChange']();
	},
	next					: function() {
		var next = this.current + 1;
		if (next == this.section.length) {
			if (this.options.wrap == true) {
				next = 0;
			} else {
				return;
			};
		};
		this.changeTo(this.sections[next]);
	},
	previous				: function() {
		var prev = this.current - 1;
		if (prev < 0) {
			if (this.options.wrap == true) {
				next = this.sections.length - 1;
			} else {
				return;
			};
		};
		this.changeTo(this.sections[prev]);
	}
});

/*
Script: App.SiteDesigner
	The Site Designer code
*/
App.SiteDesigner = new Hash({
	behaviour						: null,
	colourPicker					: null,
	colourPickerWrapper				: null,
	colourPickerSettings			: {
		'current'					: '',
		'closed'					: true,
		'colourCurrent'				: ''
	},
	defaults						: {},
	progressSpinner					: null,
	selectedTemplate				: 1,
	swf								: null,
	uploaders						: $H(),
	domready						: function() {
		if ($('site-designer')) {
			this.initialize();
		};
	},
	initialize						: function() {
		this.progressSpinner = new ProgressSpinner('site-designer-form').show();
		this.behaviour = new Behaviour(this.events);
		this.loadTemplates();
		this.loadFlash();
		this.loadColourPicker();
	},
	load							: function() {
		if ($('site-designer')) {
			this.initUploaders();
		};
	},
	loadFlash						: function() {
		if (Browser.Plugins.Flash.version < 9) {
			if (confirm("You do not have the latest version of the Flash Player installed.\nThe Site Designer requires a minimum of Flash Player 9.\n\nClick OK to be taken to the upgrade page.")) {
				window.location = 'http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=shockwaveFlash';
			};
		} else {
			var width = (Browser.Engine.trident4) ? 607 : 609;
			this.swf = new Swiff('/assets/themes/SiteDesigner.swf?' + $time(), {
				container				: 'flash-preview-box',
				height					: 460,
				id						: 'flash-preview',
				width					: width,
				params					: {
					allowFullScreen		: 'false',
					allowScriptAccess	: '*',
					quality				: 'high',
					wmode				: 'opaque'
				},
				vars					: {
					siteName			: $('site-name').value || 'My Social Network',
					target_element		: 'output-primary',
					templateFile		: $('template-file').value,
					site				: 'my',
					environment			: $('environment').value.replace('my.', '')
				}
			});
		};
	},
	loadTemplates					: function(category) {
		var categoryURL = '';
		if (category) {
			categoryURL = '/' + category;
		};
		new Request.JSON({
			method			: 'get',
			url				: 'http://' + location.host + '/public/json/template.list.json' + categoryURL,
			onComplete		: function(responseJSON, responseText) {
				$('templates-list').empty();
				for (var template in responseJSON) {
					if (template == 'error') {
						var item = new Element('li');
						item.innerHTML = 'No Templates in this category. Please select a difference one...'
						item.injectInside($('templates-list'));
					} else {
						var listItem = this.drawTemplate(responseJSON[template], template);
						listItem.injectInside($('templates-list'));
					};
				};
			}.bind(this)
		}).get();
	},
	drawTemplate					: function(template, value) {
		if (this.selectedTemplate != value) {
			var listItem = new Element('li', {
				'id'		: 'template-' + value
			});
		} else {
			var listItem = new Element('li', {
				'class'		: 'selected',
				'id'		: 'template-' + value
			});
		};
		var anchor = new Element('a', {
			'href'			: '',
			'title'			: template.tooltip,
			'rel'			: value
		}).injectInside(listItem);
		anchor.addEvent('click', function(event) {
			new Event(event).stop();
			if ($('template-' + App.SiteDesigner.selectedTemplate)) {
				$('template-' + App.SiteDesigner.selectedTemplate).removeClass('selected');
			};
			$('template-' + this.getProperty('rel')).addClass('selected');
			App.SiteDesigner.selectedTemplate = this.getProperty('rel');
			App.SiteDesigner.loadPalette(this.getProperty('rel'));
		});
		var image = new Element('img', {
			'alt'			: template.tooltip,
			'class'			: 'photo',
			'height'		: 90,
			'width'			: 110,
			'src'			: template.image
		}).injectInside(anchor);
		return listItem;
	},
	loadPalette						: function(template) {
		this.swf.remote('startProgressSpinner', 'load-new-palette');
		new Request.JSON({
			method			: 'get',
			url				: 'http://' + location.host + '/public/json/template.json/' + template,
			onComplete		: function(responseJSON, responseText) {
				if (responseJSON != undefined && responseText != undefined) {
					this.swf.remote('loadPalette', responseText);
					this.selectedTemplate = template;
					 this.setPalette(responseJSON);
				} else {
					alert('The selected template failed to load. Please try again in a few seconds.');
					this.swf.remote('stopProgressSpinner', 'load-new-palette');
				};
			}.bind(this)
		}).get();
	},
	setPalette						: function(json) {
		// Set Header Options
		$('network-title').setStyle('background-color', json['network-title']);
		$('output-header-text').value = json['network-title'];
		$('output-header-font').value = json['network-title-font'];
		$('output-header-alignment').value = json['options']['network-title']['align'];
		
		if (json['options']['network-logo-image'] && json['options']['network-logo-image']['url'] != '') {
			$('network-logo-image-url').value = json['options']['network-logo-image']['url'];
			this.setupRemoveButton($('network-logo-image-choose'));
		} else {
			if ($('network-logo-image-remove')) {
				$('network-logo-image-remove').destroy();
			};
			$('network-logo-image-url').value = 'delete';
		};
		$('header-colour').setStyle('background-color', json['header-colour']);
		$('output-header').value = json['header-colour'];
		
		if (json['options']['header-full-image'] && json['options']['header-full-image']['url'] != '') {
			$('header-image-url').value = json['options']['header-full-image']['url'];
			$('header-image-width').value = 'fullWidth';
			this.setupRemoveButton($('header-image-choose'));
			$('header-image-options').setStyle('display', 'block');
		} else if (json['options']['header-body-image'] && json['options']['header-body-image']['url'] != '') {
			$('header-image-url').value = json['options']['header-body-image']['url'];
			$('header-image-width').value = 'bodyWidth';
			this.setupRemoveButton($('header-image-choose'));
			$('header-image-options').setStyle('display', 'block');
		} else {
			if ($('header-image-remove')) {
				$('header-image-remove').destroy();
			};
			$('header-image-url').value = 'delete';
		};

		$('navigation-text-colour').setStyle('background-color', json['navigation-bar']['text']);
		$('output-tab-text').value = json['navigation-bar']['text'];
		$('navigation-tab-colour').setStyle('background-color', json['navigation-bar']['tab']);
		$('output-tab-background').value = json['navigation-bar']['tab'];
		
		// Set Body Options
		$('box-header-colour').setStyle('background-color', json['box-header-colour']);
		$('output-box-header').value = json['box-header-colour'];
		$('box-header-text-colour').setStyle('background-color', json['box-header-text-colour']);
		$('output-box-header-text').value = json['box-header-text-colour'];
		$('box-background-colour').setStyle('background-color', json['box-background-colour']);
		$('output-box-background').value = json['box-background-colour'];
		$('text-colour').setStyle('background-color', json['text-colour']);
		$('output-text-colour').value = json['text-colour'];
		$('link-text-colour').setStyle('background-color', json['link-text-colour']);
		$('output-link-text-colour').value = json['link-text-colour'];
		$('background-colour').setStyle('background-color', json['background-colour']);
		$('output-background').value = json['background-colour'];
		
		// Set the background image here
		if (json['options']['background-image'] && json['options']['background-image']['url'] != '') {
			$('background-image-url').value = json['options']['background-image']['url'];
			this.setupRemoveButton($('background-image-choose'));
			$('background-image-options').setStyle('display', 'block');
			
			if (json['options']['background-image']['attachment']) {
				$('background-image-fixed').checked = true;
			};
			if (json['options']['background-image']['position']) {
				$('background-start-position').value = json['options']['background-image']['position'];
				
			};
			if (json['options']['background-image']['repeat']) {
				$('background-tiling-options').value = json['options']['background-image']['repeat'];
			};
			if (json['options']['main-content-background'] && json['options']['main-content-background']['visible']) {
				if (json['options']['main-content-background']['visible'] == 'true') {
					$('show-main-content-background').checked = true;
				} else {
					$('show-main-content-background').checked = false;
				};
			};
		} else {
			if ($('background-image-remove')) {
				$('background-image-remove').destroy();
			};
			$('background-image-url').value = 'delete';
		};
	},
	finishedLoadingPalette			: function() {
		this.swf.remote('stopProgressSpinner', 'load-new-palette');
	},
	loadDefaults					: function() {
		// Network Title
		this.setTextColour($('output-header-text').value.replace('#', '0x'), 'network-title', $('output-header-text').value);
		this.defaults['network-title'] = $('output-header-text').value;
		// Title Font
		this.setFont($('output-header-font').value, 'network-title-font');
		this.defaults['network-title-font'] = $('output-header-font').value;
		// Header Alignment
		this.setHeaderAlignment($('output-header-alignment').value);
		this.defaults['header-alignment'] = $('output-header-alignment').value;
		// Network Logo
		if ($('network-logo-image-url').value != '') {
			var logoImage = $('network-logo-image-url').value;
			this.setLogoImage(logoImage);
			this.setupRemoveButton($('network-logo-image-choose'));
			this.defaults['network-logo-image'] = logoImage;
		};
		// Header Colour
		this.setColour($('output-header').value.replace('#', '0x'), 'header-colour');
		this.defaults['header-colour'] = $('output-header').value;
		// Header Image
		if ($('header-image-url').value != '') {
			var headerImage = $('header-image-url').value;
			if ($('header-image-width').value == 'fullWidth') {
				this.setFullWidthHeaderImage(headerImage);
			} else {
				this.setBodyWidthHeaderImage(headerImage);
			};
			this.setupRemoveButton($('header-image-choose'));
			this.defaults['header-image'] = $('header-image-url').value;
			$('header-image-options').setStyle('display', 'block'); 
		};
		this.defaults['header-image-width'] = $('header-image-width').value;
		// Tab Text Colour
		this.setTextColour($('output-tab-text').value.replace('#', '0x'), 'navigation-text-colour', $('output-tab-text').value);
		this.defaults['navigation-text-colour'] = $('output-tab-text').value;
		// Tab Background Colour
		this.setColour($('output-tab-background').value.replace('#', '0x'), 'navigation-tab-colour');
		this.defaults['navigation-tab-colour'] = $('output-tab-background').value;
		// Box Header
		this.setColour($('output-box-header').value.replace('#', '0x'), 'box-header-colour');
		this.defaults['box-header-colour'] = $('output-box-header').value;
		// Box Title
		this.setTextColour($('output-box-header-text').value.replace('#', '0x'), 'box-header-text-colour', $('output-box-header-text').value);
		this.defaults['box-header-text-colour'] = $('output-box-header-text').value;
		// Box Background
		this.setColour($('output-box-background').value.replace('#', '0x'), 'box-background-colour');
		this.defaults['box-background-colour'] = $('output-box-background').value;
		// Text Colour
		this.setTextColour($('output-text-colour').value.replace('#', '0x'), 'text-colour', $('output-text-colour').value);
		this.defaults['text-colour'] = $('output-text-colour').value;
		// Link Colour
		this.setTextColour($('output-link-text-colour').value.replace('#', '0x'), 'link-text-colour', $('output-link-text-colour').value);
		this.defaults['link-text-colour'] = $('output-link-text-colour').value;
		// Background Colour
		this.setColour($('output-background').value.replace('#', '0x'), 'background-colour');
		this.defaults['background-colour'] = $('output-background').value;
		// Background Image
		if ($('background-image-url').value != '') {
			var backgroundImage = $('background-image-url').value
			this.setBackgroundImage(backgroundImage);
			this.setupRemoveButton($('background-image-choose'));
			this.defaults['background-image'] = backgroundImage;
			$('background-image-options').setStyle('display', 'block'); 
		};
	},
	loadColourPicker				: function() {
		this.colourPickerWrapper = new Element('div', {
			'styles'		: {
				'background'	: 'white',
				'border'		: '1px solid #BBBBBB',
				'display'		: 'none',
				'height'		: '165px',
				'padding'		: (Browser.Engine.trident ? '5px 1px 0px 5px' : '5px'),
				'position'		: 'absolute',
				'width'			: '235px'
			}
		}).injectInside($(document.body));
	},
	toggleColourPicker				: function(element) {
		var position = element.getCoordinates();
		
		if (Browser.Engine.trident) {
			if (element.getParent('div#header-pane')) {
				position.left += element.getParent('form').getCoordinates().width;
			} else if (element.getParent('div#body-pane')) {
				position.left += (element.getParent('form').getCoordinates().width * 2);
			};
		};
		
		this.colourPickerWrapper.setStyles({
			'left'			: position.left - 4,
			'top'			: position.top + 3 + position.height
		});
		
		var swatchColour = element.getStyle('background-color');
		
		// set the hidden input value
		// $('output-' + this.colourPickerSettings.current).value = swatchColour;
		var hexColour = swatchColour.replace('#', '0x');
		
		this.colourPicker = new Swiff('/assets/themes/ColourPicker.swf?nocache=' + $time(), {
			container				: this.colourPickerWrapper,
			height					: 180,
			id						: 'snm_colour_picker',
			width					: 240,
			params					: {
				allowFullScreen		: 'false',
				allowScriptAccess	: '*',
				quality				: 'high',
				wmode				: 'transparent'
			},
			vars					: {
				current_colour		: hexColour,
				target_element		: 'output-primary'
			}
		});
		
		if (this.colourPickerSettings.current == element.getProperty('rel')) {
			// close colour picker
			if (Browser.Engine.trident) {
				this.showSelectBoxes();
			};
			this.hideColourPicker();
			this.showUploaderButton(element);
			this.colourPickerSettings.closed = true;
		} else if (this.colourPickerSettings.closed == true) {
			// show colour picker
			if (Browser.Engine.trident) {
				this.hideSelectBoxes();
			};
			this.hideUploaderButton(element);
			this.colourPickerWrapper.setStyle('display', 'block');
			this.colourPickerSettings.current = element.getProperty('rel');
			this.colourPickerSettings.closed = false;
		} else if (this.colourPickerSettings.current != element.getProperty('rel') && this.colourPickerSettings.closed != true) {
			// move colour picker
			if (Browser.Engine.trident && element.getProperty('rel') == 'network-title') {
				this.hideSelectBoxes();
			};
			this.hideUploaderButton(element);
			this.colourPickerSettings.current = element.getProperty('rel');
		};
	},
	hideColourPicker				: function() {
		if (Browser.Engine.trident) {
			this.showSelectBoxes();
		};
		this.showUploaderButton($(this.colourPickerSettings.current));
		this.colourPickerWrapper.setStyle('display', 'none');
		this.colourPickerSettings.current = '';
		this.colourPickerSettings.closed = true;
	},
	showUploaderButton				: function(element) {
		if (element.getProperty('rel') == 'network-title') {
			if (Browser.Engine.gecko) {
				$(App.SiteDesigner.uploaders['network-logo-image'].movieName).setStyle('display', 'block');
			} else {
				$(App.SiteDesigner.uploaders['network-logo-image'].movieName).style.visibility = 'visible';
			};
		} else if (element.getProperty('rel') == 'header-colour') {
			if (Browser.Engine.gecko) {
				$(App.SiteDesigner.uploaders['header-image'].movieName).setStyle('display', 'block');
			} else {
				$(App.SiteDesigner.uploaders['header-image'].movieName).style.visibility = 'visible';
			};
		} else if (element.getProperty('rel') == 'background-colour') {
			if (Browser.Engine.gecko) {
				$(App.SiteDesigner.uploaders['background-image'].movieName).setStyle('display', 'block');
			} else {
				$(App.SiteDesigner.uploaders['background-image'].movieName).style.visibility = 'visible';
			};
		};
	},
	hideUploaderButton				: function(element) {
		if (element.getProperty('rel') == 'network-title') {
			if (Browser.Engine.gecko) {
				$(App.SiteDesigner.uploaders['network-logo-image'].movieName).setStyle('display', 'none');
			} else {
				$(App.SiteDesigner.uploaders['network-logo-image'].movieName).style.visibility = 'hidden';
			};
		} else if (element.getProperty('rel') == 'header-colour') {
			if (Browser.Engine.gecko) {
				$(App.SiteDesigner.uploaders['header-image'].movieName).setStyle('display', 'none');
			} else {
				$(App.SiteDesigner.uploaders['header-image'].movieName).style.visibility = 'hidden';
			};
		} else if (element.getProperty('rel') == 'background-colour') {
			if (Browser.Engine.gecko) {
				$(App.SiteDesigner.uploaders['background-image'].movieName).setStyle('display', 'none');
			} else {
				$(App.SiteDesigner.uploaders['background-image'].movieName).style.visibility = 'hidden';
			};
		};
	},
	convertRGB						: function(colour) {
		/* DEPRECATED */
		colour = colour.replace(/rgb\(|\)/g, "").split(",");
		colour[0] = parseInt(colour[0], 10).toString(16).toLowerCase();
		colour[1] = parseInt(colour[1], 10).toString(16).toLowerCase();
		colour[2] = parseInt(colour[2], 10).toString(16).toLowerCase();
		colour[0] = (colour[0].length == 1) ? '0' + colour[0] : colour[0];
		colour[1] = (colour[1].length == 1) ? '0' + colour[1] : colour[1];
		colour[2] = (colour[2].length == 1) ? '0' + colour[2] : colour[2];
		return ('#' + colour.join(""));
	},
	updatePreviewColour				: function(colour) {
		var swatchColour = '#' + this.fixColour(colour);
		
		// A Ross Change
		this.colourPickerSettings.colourCurrent = swatchColour;
		
		$(this.colourPickerSettings.current).setStyle('background-color', swatchColour);
		// set the hidden input value
		//$('output-' + this.colourPickerSettings.current).value = swatchColour;
		var hexColour = swatchColour.replace('#', '0x');
		// Set the colours in the preview
		
		if (this.colourPickerSettings.current.match(/text/)) {
			this.setTextColour(hexColour, this.colourPickerSettings.current, swatchColour);
		} else if (this.colourPickerSettings.current.match(/title/)) {
			this.setTextColour(hexColour, this.colourPickerSettings.current, swatchColour);
		} else {
			this.setColour(hexColour, this.colourPickerSettings.current);
		};
	},
	fixColour						: function(colour) {
		var re = new RegExp(/#/gi);
		colour = colour.replace(re, '');
		switch (colour.length) {
			case 1:
				colour = '00000' + colour;
				break;
			case 2:
				colour = '0000' + colour;
				break;
			case 3:
				colour = '000' + colour;
				break;
			case 4:
				colour = '00' + colour;
				break;
			case 5:
				colour = '0' + colour;
				break;
		}
		return colour;
	},
	initUploaders					: function() {
		['network-logo-image', 'header-image', 'background-image'].each(function(element) {
			this.setupUploader($(element));
		}.bind(this));
	},
	setupUploader					: function(element) {
		var url = '/' + $('snm-site-id').value + '/upload/' + $('snm-session-id').value + '/' + element.getProperty('rel');
		this.uploaders[element.id] = new SWFUpload({
			// Backend Settings
			upload_url							: url,
			post_params							: {
				"PHPSESSID"						: $('snm-session-id').value
			},

			// File Upload Settings
			file_size_limit						: "102400",	// 100MB
			file_types							: "*.gif;*.jpg;*.jpeg;*.png",
			file_types_description				: "All Web Picture Files",
			file_upload_limit					: "0",
			file_queue_limit					: "1",

			// Event Handler Settings (all my handlers are in the Handler.js file)
			file_dialog_start_handler			: fileDialogStart,
			file_queued_handler					: fileQueued,
			file_queue_error_handler			: fileQueueError,
			file_dialog_complete_handler		: fileDialogComplete,
			upload_start_handler				: uploadStart,
			upload_progress_handler				: uploadProgress,
			upload_error_handler				: uploadError,
			upload_success_handler				: uploadSuccess,
			upload_complete_handler				: uploadComplete,

			// Button Settings
			button_image_url					: "/application/external/swfupload-f10/XPButtonUploadText_61x22.png",	// Relative to the SWF file
			button_placeholder_id				: element.get('id'),
			button_width						: 61,
			button_height						: 22,
			
			custom_settings : {
				// progressTarget					: "fsUploadProgress",
				cancelButtonId					: "btnCancel"
			},

			// Flash Settings
			flash_url							: "/application/external/swfupload-f10/swfupload.swf",

			// Debug Settings
			debug								: false
		});
		this.uploaders[element.id].fileDialogComplete = function(file) {
			try {
				if (file > 0) {
					App.SiteDesigner.swf.remote('startProgressSpinner', 'start-upload');
					this.startUpload();
				};
			} catch (ex) {
				this.debug(ex);
			};
		};
		this.uploaders[element.id].uploadError = function(file) {
			try {
				App.SiteDesigner.swf.remote('stopProgressSpinner', 'start-upload');
			} catch (ex) {
				this.debug(ex);
			};
		};
		this.uploaders[element.id].uploadComplete = function(file) {
			try {
				var suffix = file.name.substr(file.name.lastIndexOf('.') + 1);
				var image = 'http://' + window['Env']['admin_url'] + '/' + $('snm-site-id').value + '/uploaded/' + $('snm-session-id').value + '/' + element.getProperty('rel') + '/' + suffix;
				
				switch (element.getProperty('rel')) {
					case 'logo':
						App.SiteDesigner.removeLogoImage();
						App.SiteDesigner.setLogoImage(image);
						App.SiteDesigner.setHeaderAlignment($('output-header-alignment').value);
						break;
					case 'header':
						App.SiteDesigner.removeHeaderImage();
						if ($('header-image-width').value == 'fullWidth') {
							App.SiteDesigner.setFullWidthHeaderImage(image);
						} else {
							App.SiteDesigner.setBodyWidthHeaderImage(image);
						};
						break;
					case 'BG':
						App.SiteDesigner.removeBackgroundImage();
						App.SiteDesigner.setBackgroundImage(image);
						break;
				};
				if (!$(element.id + '-remove')) {
					var removeButton = new Element('input', {
						'class'			: 'remove-image',
						'id'			: element.id + '-remove',
						'type'			: 'button',
						'events'		: {
							'click'		: function(event) {
								new Event(event).stop();
								if (element.getProperty('rel') == 'logo') {
									App.SiteDesigner.removeLogoImage();
								} else if (element.getProperty('rel') == 'header') {
									App.SiteDesigner.removeHeaderImage();
								} else if (element.getProperty('rel') == 'BG') {
									App.SiteDesigner.removeBackgroundImage();
								};
								if ($(element.id + '-options')) {
									$(element.id + '-options').setStyle('display', 'none');
								};
								$(element.id + '-remove').destroy();
								$(element.id + '-url').value = 'delete';
							}.bind(this)
						},
						'value'			: 'Remove'
					});
					removeButton.inject($(element.id + '-choose'), 'after');
				};
				if ($(element.id + '-options')) {
					$(element.id + '-options').setStyle('display', 'block');
				};
				$(element.id + '-url').value = image;
				
				App.SiteDesigner.swf.remote('stopProgressSpinner', 'start-upload');
			} catch(ex) {
				this.debug(ex);
			};
		};
	},
	setupRemoveButton				: function(element) {
		var id = element.id.replace('-choose', '-remove');
		if (!$(id)) {
			var removeButton = new Element('input', {
				'class'				: 'remove-image',
				'id'				: id,
				'type'				: 'button',
				'events'			: {
					click			: function(event) {
						new Event(event).stop();
						if (element.id.match(/network-logo/)) {
							this.removeLogoImage();
						} else if (element.id.match(/header-image/)) {
							this.removeHeaderImage();
						} else if (element.id.match(/background-image/)) {
							this.removeBackgroundImage();
						};
						if ($(id.replace('-remove', '-options'))) {
							$(id.replace('-remove', '-options')).setStyle('display', 'none');
						};
						$(id).destroy();
						$(id.replace('-remove', '-url')).value = 'delete';
					}.bind(this)
				},
				'value'				: 'Remove'
			});
			removeButton.inject(element, 'after');
		};
	},
	setColour						: function(colour, elementName) {
		this.swf.remote('setColour', colour, elementName);
		switch (elementName) {
			case 'header-colour':
				$('output-header').value = colour.replace('0x', '#');
				break;
			case 'navigation-tab-colour':
				$('output-tab-background').value = colour.replace('0x', '#');
				break;
			case 'box-header-colour':
				$('output-box-header').value = colour.replace('0x', '#');
				break;
			case 'box-background-colour':
				$('output-box-background').value = colour.replace('0x', '#');
				break;
			case 'background-colour':
				$('output-background').value = colour.replace('0x', '#');
		};
	},
	setTextColour					: function(hexColour, elementName, swatchColour) {
		this.swf.remote('setTextColour', hexColour, elementName, swatchColour);
		switch (elementName) {
			case 'network-title':
				$('output-header-text').value = swatchColour;
				break;
			case 'navigation-text-colour':
				$('output-tab-text').value = swatchColour;
				break;
			case 'box-header-text-colour':
				$('output-box-header-text').value = swatchColour;
				break;
			case 'text-colour':
				$('output-text-colour').value = swatchColour;
				break;
			case 'link-text-colour':
				$('output-link-text-colour').value = swatchColour;
				break;
		};
	},
	setFont							: function(fontName, elementName) {
		this.swf.remote('setFont', fontName, elementName);
	},
	setHeaderAlignment				: function(align) {
		this.swf.remote('setTextAlignment', align, 'network-title');
		this.swf.remote('setLogoAlignment', align);
	},
	setLogoImage					: function(image) {
		// Need to do a check to see if there's a full url, or just a relative path
		this.swf.remote('setLogoImage', '', true);
		this.swf.remote('setLogoImage', image);
	},
	removeLogoImage					: function() {
		this.swf.remote('setLogoImage', '', true);
	},
	setFullWidthHeaderImage			: function(image) {
		this.swf.remote('setFullWidthHeaderImage', '', true);
		this.swf.remote('setBodyWidthHeaderImage', '', true);
		this.swf.remote('setFullWidthHeaderImage', image);
	},
	setBodyWidthHeaderImage			: function(image) {
		this.swf.remote('setFullWidthHeaderImage', '', true);
		this.swf.remote('setBodyWidthHeaderImage', '', true);
		this.swf.remote('setBodyWidthHeaderImage', image);
	},
	changeHeaderWidth				: function(width) {
		if (width == 'fullWidth') {
			this.setFullWidthHeaderImage($('header-image-url').value);
		} else {
			this.setBodyWidthHeaderImage($('header-image-url').value);
		};
	},
	removeHeaderImage				: function() {
		this.swf.remote('setFullWidthHeaderImage', '', true);
		this.swf.remote('setBodyWidthHeaderImage', '', true);
	},
	setBackgroundImage				: function(image) {
		this.swf.remote('setBackgroundImage', '', null, true);
		var options = this.buildBackgroundOptions();
		this.swf.remote('setBackgroundImage', image, options);
	},
	buildBackgroundOptions			: function() {
		var position = $('background-start-position').value.split(' ');
		return {
			'position'		: {
				'x'			: position[1],
				'y'			: position[0]
			},
			'repeat'		: $('background-tiling-options').value,
			'tile'			: ($('background-tiling-options').value != 'no-repeat' ? true : false)
		};
	},
	removeBackgroundImage			: function() {
		this.swf.remote('setBackgroundImage', '', null, true);
	},
	setContentBackground			: function(display) {
		if (display == true) {
			this.swf.remote('setMainContentBackgroundVisibility', true);
		} else {
			this.swf.remote('setMainContentBackgroundVisibility', false);
		};
	},
	resetChanges					: function() {
		//alert('reset changes');
	},
	showSelectBoxes					: function() {
		var selects = $(document.body).getElements('select');
		selects.each(function(select) {
			if (select.name == 'output-header-font' || select.name == 'options_url_hc_bg' || select.name == 'options_url_logo') {
				select.setStyle('visibility', 'visible');
			};
		});
	},
	hideSelectBoxes					: function() {
		var selects = $(document.body).getElements('select');
		selects.each(function(select) {
			if (select.name == 'output-header-font' || select.name == 'options_url_hc_bg' || select.name == 'options_url_logo') {
				select.setStyle('visibility', 'hidden');
			};
		});
	},
	initSlidingTabs					: function() {
		var frame = $('site-designer').getElement('form.frame');
		var tabs = new App.SlidingTabs(frame, 'toolbar', {
			startSection		: 'header-pane',
			wait				: false,
			callBacks			: {
				onLoad			: function() {
					['background-image'].each(function(element) {
						if (Browser.Engine.gecko) {
							$(App.SiteDesigner.uploaders[element].movieName).setStyle('display', 'none');
						} else {
							$(App.SiteDesigner.uploaders[element].movieName).style.visibility = 'hidden';
						};
					});
				},
				onBeforeChange	: function() {
					if (!App.SiteDesigner.colourPickerSettings.closed) {
						App.SiteDesigner.toggleColourPicker($(App.SiteDesigner.colourPickerSettings['current']));
					};
					['network-logo-image', 'header-image', 'background-image'].each(function(element) {
						if (Browser.Engine.gecko) {
							$(App.SiteDesigner.uploaders[element].movieName).setStyle('display', 'none');
						} else {
							$(App.SiteDesigner.uploaders[element].movieName).style.visibility = 'hidden';
						};
					});
				},
				onChange		: function() {
					if (tabs.current == 1) {
						['network-logo-image', 'header-image'].each(function(element) {
							if (Browser.Engine.gecko) {
								$(App.SiteDesigner.uploaders[element].movieName).setStyle('display', 'block');
							} else {
								$(App.SiteDesigner.uploaders[element].movieName).style.visibility = 'visible';
							};
						});
					} else if (tabs.current == 2) {
						['background-image'].each(function(element) {
							if (Browser.Engine.gecko) {
								$(App.SiteDesigner.uploaders[element].movieName).setStyle('display', 'block');
							} else {
								$(App.SiteDesigner.uploaders[element].movieName).style.visibility = 'visible';
							};
						});
					};
				}
			}
		});
	},
	events							: {
		/* Setup the Sliding Tabs */
		'div#site-designer'			: {
			domready				: function() {
				if (Browser.Engine.trident) {
					App.SiteDesigner.initSlidingTabs();
				};
			},
			load					: function() {
				if (!Browser.Engine.trident) {
					App.SiteDesigner.initSlidingTabs();
				};
			}
		},
		/* Toggle the Colour Picker */
		'a.colour-picker'			: {
			click					: function(event) {
				new Event(event).stop();
				App.SiteDesigner.toggleColourPicker(this);
			}
		},
		/* Select the Font */
		'select#output-header-font'	: {
			change					: function(event) {
				new Event(event).stop();
				App.SiteDesigner.setFont(this.value, this.getProperty('rel'));
			}
		},
		/* Set the Header Alignment */
		'select#output-header-alignment'	: {
			change					: function(event) {
				new Event(event).stop();
				App.SiteDesigner.setHeaderAlignment(this.value);
			}
		},
		/* Set the Header Image Width */
		'select#header-image-width'	: {
			change					: function(event) {
				new Event(event).stop();
				App.SiteDesigner.changeHeaderWidth(this.value);
			}
		},
		/* Set the Background Image Start Position */
		'select#background-start-position'	: {
			change					: function(event) {
				new Event(event).stop();
				App.SiteDesigner.setBackgroundImage($('background-image-url').value);
			}
		},
		/* Set the Background Tiling Options */
		'select#background-tiling-options'	: {
			change					: function(event) {
				new Event(event).stop();
				App.SiteDesigner.setBackgroundImage($('background-image-url').value);
			}
		},
		/* Set the Main Content Background Display Option */
		'input#show-main-content-background'	: {
			click					: function(event) {
				App.SiteDesigner.setContentBackground(this.checked);
			}
		},
		/* Handle the Submit Changes Button */
		'a#submit-changes'			: {
			click					: function(event) {
				new Event(event).stop();
				$('site-designer-form').submit();
			}
		},
		/* Handle the Save Template Button */
		'a#save-template'			: {
			click					: function(event) {
				new Event(event).stop();
				$('flash-preview-box').empty();

				var headerImage = "header-" + ($('header-image-width').value == "fullWidth" ? 'full' : 'body') +"-image-url:" + ($('header-image-url').value == 'delete' ? '' : $('header-image-url').value) + "\n"
				var templateText =	"template-preview-image:\n" + 
									"header-colour:" + $('output-header').value + "\n" + 
									headerImage + 
									"network-title:" + $('output-header-text').value + "\n" + 
									"network-title-font:" + $('output-header-font').value + "\n" + 
									"network-title-align:" + $('output-header-alignment').value + "\n" + 
									"network-logo-image-url:" + ($('network-logo-image-url').value == 'delete' ? '' : $('network-logo-image-url').value) + "\n" + 
									"network-logo-image-align:" + $('output-header-alignment').value + "\n" + 
									"navigation-bar-tab:" + $('output-tab-background').value + "\n" + 
									"navigation-bar-text:" + $('output-tab-text').value + "\n" + 
									"background-colour:" + $('output-background').value + "\n" + 
									"text-colour:" + $('output-text-colour').value + "\n" + 
									"link-text-colour:" + $('output-link-text-colour').value + "\n" + 
									"background-image-url:" + ($('background-image-url').value == 'delete' ? '' : $('background-image-url').value) + "\n" + 
									"background-image-position:" + $('background-start-position').value + "\n" + 
									"background-image-repeat:" + $('background-tiling-options').value + "\n" + 
									"main-content-background-visible:" + ($('show-main-content-background').value == "showbglayer" ? "true" : "") + "\n" + 
									"box-background-colour:" + $('output-box-background').value + "\n" + 
									"box-header-colour:" + $('output-box-header').value + "\n" + 
									"box-header-text-colour:" + $('output-box-header-text').value;
				var text = new Element('textarea', {
					'id'			: 'save-template-textarea',
					'styles'		: {
						'font-size'		: '14px',
						'line-height'	: '21px',
						'height'		: '459px',
						'width'			: '609px'
					},
					'value'			: templateText
				});
				text.injectInside($('flash-preview-box'));
			}
		}
	}
});

/*
Script: App.TabsAndFeatures
  
*/
App.TabsAndFeatures = new Hash({
	tabList							: null,
	domready						: function() {
		if ($('my-tabs')) {
			this.setupDragAndDrop();
		};
		if ($('form-tabs-features'))
		{
		  this.behaviour = new Behaviour(this.events);
		};
	},
	setupDragAndDrop				: function() {
		App.TabsAndFeatures.tabList = new Sortables($('my-tabs'), {
			clone					: true,
			// constrain				: true,
			handle					: 'a.tab-link',
			opacity					: 0.5,
			snap					: 1,
			onStart					: function(elem, clone) {
				elem.setStyle('background-color', '#CCCCCC');
				elem.setStyle('border', '1px dashed #333333');
				elem.setStyle('-moz-border-radius', '4px');
				
				elem.getElement('a.tab').setStyle('padding', '4px 0px 5px 5px');
				elem.getElement('a.tab-link').setStyle('padding-top', '5px');
				elem.getChildren().each(function(kid) {
					kid.setStyle('visibility', 'hidden');
				});
			},
			onComplete				: function(elem) {
				elem.setStyle('background-color', '');
				elem.setStyle('border', '');
				elem.setStyle('-moz-border-radius', '');
				
				elem.getElement('a.tab').setStyle('padding', '6px 0px 6px 6px');
				elem.getElement('a.tab-link').setStyle('padding-top', '7px');
				elem.getChildren().each(function(kid) {
					kid.setStyle('visibility', 'visible');
				});
				$('my-tabs-value').value = this.serialize(0, function(element, index) {
					return 'my-tabs[]=' + element.getProperty('id').replace('tab_', '');
					
				}).join('&');
				var myRequest = new Request(
				  { 
				    method: 'get', 
				    url: '/' + window['Env']['site_id'] + '/ajax/network/tabs-reorder',
				    'onComplete': function(j) {
              
            }
          }).send($('my-tabs-value').value);
				//var myRequest = new Request({ method: 'get', url: '/' + window['Env']['site_id'] + '/ajax/network.features/reorder-tabs/' }).send($('my-tabs-value').value);
			}
		});
	},
	events : {
		'input#content_visibility_private' : {
			'click' : function() {
				$('levels').style.display = 'block';
			}
	  },
	  'input#content_visibility_public' : {
			'click' : function() {
				$('levels').style.display = 'none';
			}
	  },
	  'input#content_visibility_open' : {
			'click' : function() {
				$('levels').style.display = 'none';
			}
	  },
	  'input#content_visibility_disabled' : {
			'click' : function() {
				$('levels').style.display = 'none';
			}
		},
		'input#content_visibility_sandbox' : {
			'click' : function() {
				$('levels').style.display = 'none';
			}
		}
  }
});

Element.implement({
  
  getCaretPosition: function() {
    if (this.createTextRange) {
      var r = document.selection.createRange().duplicate();
    	r.moveEnd('character', this.value.length);
    	if (r.text === '') return this.value.length;
    	return this.value.lastIndexOf(r.text);
    } else return this.selectionStart;
  }
  
});

var ResizableTextbox = new Class({
  
  Implements: Options,
  
  options: {
    min: 5,
    max: 500,
    step: 7
  },
  
  initialize: function(element, options) {
    var that = this;
    this.setOptions(options);
    this.el = $(element);
    this.width = this.el.offsetWidth;
    this.el.addEvents({
      'keydown': function() {
        this.store('rt-value', this.get('value').length);
      },
      'keyup': function() {
        var newsize = that.options.step * this.get('value').length;
        if(newsize <= that.options.min) newsize = that.width;
        if(! (this.get('value').length == this.retrieve('rt-value') || newsize <= that.options.min || newsize >= that.options.max))
          this.setStyle('width', newsize);
      }
    });
  }
  
});

var TextboxList = new Class({
  
  Implements: [Events, Options],

  options: {/*
    onFocus: $empty,
    onBlur: $empty,
    onInputFocus: $empty,
    onInputBlur: $empty,
    onBoxFocus: $empty,
    onBoxBlur: $empty,
    onBoxDispose: $empty,*/
    resizable: {},
    className: 'bit',
    separator: '###',
    extrainputs: true,
    startinput: true,
    hideempty: true
  },
  
  initialize: function(element, options) {
    this.setOptions(options);
    this.element = $(element).setStyle('display', 'none');    
    this.bits = new Hash;
    this.events = new Hash;
    this.count = 0;
    this.current = false;
    this.maininput = this.createInput({'class': 'maininput'});
    this.holder = new Element('ul', {
      'class': 'holder', 
      'events': {
        'click': function(e) { 
          e = new Event(e).stop();
          if(this.maininput != this.current) this.focus(this.maininput); 
        }.bind(this)
      }
    }).inject(this.element, 'before').adopt(this.maininput);
    this.makeResizable(this.maininput);
    this.setEvents();
  },
  
  setEvents: function() {
    document.addEvent(Browser.Engine.trident ? 'keydown' : 'keypress', function(e) {    
      if(! this.current) return;
      if(this.current.retrieve('type') == 'box' && e.code == Event.Keys.backspace) new Event(e).stop();
    }.bind(this));      
         
    document.addEvents({
      'keyup': function(e) { 
        e = new Event(e).stop();
        if(! this.current) return;
        switch(e.code){
          case Event.Keys.left: return this.move('left');
          case Event.Keys.right: return this.move('right');
          case Event.Keys.backspace: return this.moveDispose();
        }
      }.bind(this),
      'click': function() { this.fireEvent('onBlur').blur(); }.bind(this)
    });
  },
  
  update: function() {
    this.element.set('value', this.bits.getValues().join(this.options.separator));
    return this;
  },
  
  add: function(text, html) {      
    var id = this.options.className + '-' + this.count++;
    var el = this.createBox($pick(html, text), {'id': id}).inject(this.current || this.maininput, 'before');
    el.addEvent('click', function(e) {
      e = new Event(e).stop();
      this.focus(el);  
    }.bind(this));
    this.bits.set(id, text);    
    if(this.options.extrainputs && (this.options.startinput || el.getPrevious())) this.addSmallInput(el, 'before');
    return el;
  },
  
  addSmallInput: function(el, where) {
    var input = this.createInput({'class': 'smallinput'}).inject(el, where);
    input.store('small', true);
    this.makeResizable(input);
    if(this.options.hideempty) input.setStyle('display', 'none');    
    return input;
  },
  
  dispose: function(el) {
    el.id = null;
    if(el.getPrevious().retrieve('small')) el.getPrevious().destroy();
    if(this.current == el) this.focus(el.getNext());
    if(el.retrieve('type') == 'box') this.fireEvent('onBoxDispose', el);
    el.destroy();    
    return this;
  },
  
  focus: function(el, nofocus) {
    if(! this.current) this.fireEvent('onFocus', el);
    else if(this.current == el) return this;
    this.blur();
    el.addClass(this.options.className + '-' + el.retrieve('type') + '-focus');
    if(el.retrieve('small')) el.setStyle('display', 'block');
    if(el.retrieve('type') == 'input') {
      this.fireEvent('onInputFocus', el);      
      if(! nofocus) this.callEvent(el.retrieve('input'), 'focus');
    }
    else this.fireEvent('onBoxFocus', el);
    this.current = el;    
    return this;
  },
  
  blur: function(noblur) {
    if(! this.current) return this;
    if(this.current.retrieve('type') == 'input') {
      var input = this.current.retrieve('input');
      if(! noblur) this.callEvent(input, 'blur');   
      this.fireEvent('onInputBlur', input);
    }
    else this.fireEvent('onBoxBlur', this.current);
    if(this.current.retrieve('small') && ! input.get('value') && this.options.hideempty) 
      this.current.setStyle('display', 'none');
    this.current.removeClass(this.options.className + '-' + this.current.retrieve('type') + '-focus');
    this.current = false;
    return this;
  },
  
  createBox: function(text, options) {
    return new Element('li', $extend(options, {'class': this.options.className + '-box'})).set('html', text).store('type', 'box');
  },
  
  createInput: function(options) {
    var li = new Element('li', {'class': this.options.className + '-input'});
    var el = new Element('input', $extend(options, {
      'type': 'text', 
      'events': {
        'click': function(e) { e = new Event(e).stop(); },
        'focus': function(e) { if(! this.isSelfEvent('focus')) this.focus(li, true); }.bind(this),
        'blur': function() { if(! this.isSelfEvent('blur')) this.blur(true); }.bind(this),
        'keydown': function(e) { this.store('lastvalue', this.value).store('lastcaret', this.getCaretPosition()); }
      }
    }));    
    return li.store('type', 'input').store('input', el).adopt(el);
  },
  
  callEvent: function(el, type) {
    this.events.set(type, el);
    el[type]();
  },
  
  isSelfEvent: function(type) {
    return (this.events.get(type)) ? !! type == null : false;
  },
  
  makeResizable: function(li) {
    var el = li.retrieve('input');
    el.store('resizable', new ResizableTextbox(el, $extend(this.options.resizable, {min: el.offsetWidth, max: this.element.getStyle('width').toInt()})));
    return this;
  },
  
  checkInput: function() {
    var input = this.current.retrieve('input');
    return (! input.retrieve('lastvalue') || (input.getCaretPosition() === 0 && input.retrieve('lastcaret') === 0));
  },
  
  move: function(direction) {
    var el = this.current['get' + (direction == 'left' ? 'Previous' : 'Next')]();
    if(el && (! this.current.retrieve('input') || ((this.checkInput() || direction == 'right')))) this.focus(el);
    return this;
  },
  
  moveDispose: function() {
    if(this.current.retrieve('type') == 'box') return this.dispose(this.current);
    if(this.checkInput() && this.bits.getKeys().length && this.current.getPrevious()) return this.focus(this.current.getPrevious());
  }
  
});

/* Code hacked to be working in specific case */

var AutocompleteList = new Class({
 
    Extends: TextboxList,

    options: {    
    onBoxDispose: function(item) { this.autoFeed(item.retrieve('text')); },
    onInputFocus: function() { this.autoShow(); },    
    onInputBlur: function(el) { 
      this.lastinput = el;
      this.blurhide = this.autoHide.delay(200, this);
    },
    autocomplete: {
      'maxresults': 15,
      'minchars': 1
    }
    },

    initialize: function(element, autoholder, options) {
    this.parent(element, options);
    this.json_list = [];
    this.input_list = [];
    this.data = [];

    	this.autoholder = $(autoholder).set('opacity', this.options.autocomplete.opacity);
    	this.autoresults = this.autoholder.getElement('ul');
    	var children = this.autoresults.getElements('li');
    children.each(function(el) { this.add(el.innerHTML); }, this); 
    },

    autoShow: function(search) {
    this.autoholder.setStyle('display', 'block');
    this.autoholder.getChildren().setStyle('display', 'none');
    if(! search || ! search.trim() || (! search.length || search.length < this.options.autocomplete.minchars)) 
    {
      this.autoholder.getElement('.default').setStyle('display', 'block');
      this.resultsshown = false;
    } else {
      this.resultsshown = true;
      this.autoresults.setStyle('display', 'block').empty();
      this.data.filter(function(str) { return str ? str.test(search, 'i') : false; }).each(function(result, ti) {
  
        if(ti >= this.options.autocomplete.maxresults) return;
        var that = this;

        var el = new Element('li').addEvents({
          'mouseenter': function() { that.autoFocus(this); },
          'click': function(e) { 
            new Event(e).stop();
            that.autoAdd(this); 
          }
        }).set('html', this.autoHighlight(result, search)).inject(this.autoresults);
        el.store('result', result);
        if(ti == 0) this.autoFocus(el);
      }, this);
    }
    return this;
    },

    autoHighlight: function(html, highlight) {
    return html.replace(new RegExp(highlight, 'gi'), function(match) {
      return '<em>' + match + '</em>';
    });
    },

    autoHide: function() {    
    this.resultsshown = false;
    this.autoholder.setStyle('display', 'none');    
    return this;
    },

    autoFocus: function(el) {
    if(! el) return;
    if(this.autocurrent) this.autocurrent.removeClass('auto-focus');
    this.autocurrent = el.addClass('auto-focus');
    return this;
    },

    autoMove: function(direction) {    
    if(!this.resultsshown) return;
    this.autoFocus(this.autocurrent['get' + (direction == 'up' ? 'Previous' : 'Next')]());
    return this;
    },

    autoFeed: function(text) {
    this.data.include(text.name);
    return this;
    },

    autoAdd: function(el) {
    if(!el || ! el.retrieve('result')) return;
    this.add(el.retrieve('result'));
    delete this.data[this.data.indexOf(el.retrieve('result'))];
    this.autoHide();
    var input = this.lastinput || this.current.retrieve('input');
    input.set('value', '').focus();
    this.updateUserList();
    if(this.getUserId(el.retrieve('result')))
    {
        window.location = 'http://' + window.location.hostname + '/' + this.getUserId(el.retrieve('result')) + '/home';
    }
    return this;
    },

    createInput: function(options) {
    var li = this.parent(options);
    var input = li.retrieve('input');
    input.addEvents({
      'keydown': function(e) {
        this.dosearch = false;
        switch(new Event(e).code) {
          case Event.Keys.up: return this.autoMove('up');
          case Event.Keys.down: return this.autoMove('down');        
          case Event.Keys.enter:
            if(! this.autocurrent) break;
            this.autoAdd(this.autocurrent);
            this.autocurrent = false;
            this.autoenter = true;
            break;
          case Event.Keys.esc: 
            this.autoHide();
            if(this.current && this.current.retrieve('input'))
              this.current.retrieve('input').set('value', '');
            break;
          default: this.dosearch = true;
        }
      }.bind(this),
      'keyup': function(e) {
          var search = input.value;
          var key = new Event(e).code;
          // Enter Key
          if((key == 0x0D) && search.length > 1)
          {
               this.maininput.toggleClass('loading');
               var r = new Request.JSON({
                   'url': '/'+ Env.site_id +'/json/admin/sites/'+search,                            
                   'onComplete': function(j) { 
                       if(j) {
                          j.each(this.autoFeed, this);
                          this.json_list = j;
                          this.maininput.toggleClass('loading');
                          this.autoShow(search);                          
                      }
      			}.bind(this)
      		}).get();
          }
        if(this.dosearch) this.autoShow(input.value);
      }.bind(this)
    });
    input.addEvent(Browser.Engine.trident ? 'keydown' : 'keypress', function(e) { 
      if(this.autoenter) new Event(e).stop()
      this.autoenter = false;
    }.bind(this));
    return li;
    },

    getUserId: function(name) {
        for(i = 0; this.json_list[i] ; i++)
        {
            if(this.json_list[i].name == name)
            {
                return this.json_list[i].id;
            }
        }
        return false;
    },

    updateInput: function() {
        $('userlist').value = '';
        this.input_list.each(function(user) {
            for(i = 0; this.json_list[i] ; i++)
            {
                if(this.json_list[i].name == user)
                {
                    $('userlist').value += this.json_list[i].id;
                    break;
                }
            }
        }.bind(this));
    },

    updateUserList: function() {
       if($('user_list'))
       {
           $('user_list').innerHTML = '';
           this.data.each(function(user) {
               var li = new Element('li', {'class': 'user-new'});
               li.adopt(new Element('a', {
                 'href': '#',
                 'class': 'closebutton',
                 'html': user,
                 'events': {
                   'click': function(e) {
                     new Event(e).stop();
                     this.add(user);
                     this.data.remove(user);
                     this.updateUserList();                 
                   }.bind(this)
                 }
               }));
               if(user)
               {
                   li.inject($('user_list'));
               }
            }.bind(this));
        }
    },

    createBox: function(text, options) {
    var li = this.parent(text, options);

    this.input_list.include(text);
    this.updateInput();
    
    return li.addEvents({
      'mouseenter': function() { this.addClass('bit-hover') },
      'mouseleave': function() { this.removeClass('bit-hover') }
    }).adopt(new Element('a', {
      'href': '#',
      'class': 'closebutton',
      'events': {
        'click': function(e) {
          new Event(e).stop();
          if(! this.current) this.focus(this.maininput);
          this.dispose(li);
          this.updateInput();
          this.data.include(text);
          this.data.sort();
          this.updateUserList();
        }.bind(this)
      }
    })).store('text', text);
    
    }
  
});

App_Request = {
    getURI : function(url)
    {
        if(!url)
        {
            var url = document.location.href;
        }
        return "/" + url.split(/[\/]+/).slice(2).join("/");
    },
    getPath : function(url)
    {
        return  document.location.pathname;
    },
    redirect : function(url)
    {
        document.location.href = url;
    },
    getAnchor : function()
    {
        try
        {        
            var B =/#([0-9a-z_\/-]+)/; 
            var A = B.exec(App_Request.getURI());
            if(A)
            {
                return A[1];
            }
            else
            {
                return false;
            }
        }
        catch(C)
        {
            return false;
        }
    }
};

function dbg(A)
{
    if(window.console)
    {
        window.console.log(A);
    }
    else
    {
        if(document.createEvent)
        {
            printfire(A);
        }
        else
        {
            alert(A);
        }
    }
}

function findParamInClass(E,B)
{
    try
    {
        var C=new RegExp("(?:^| )"+E+"_([A-Za-z0-9/:?&-._]+)");
        var A=C.exec(B.className);
        if(A)
        {
            return A[1];
        }
    }
    catch(D){}
    return false;
}

var SoGO = App;
window.addEvent('beforeload', App.beforeload());