dojo.require("dojo.NodeList-traverse");
dojo.require("dojo.fx");
dojo.require("dojo.fx.easing");

var keyListener; // Contains the dojo connect, used to disconnect.
var allowLogin; 
var userDomain ='';
var userLocation = 'site';
var okConnection;
var closeConnection;

// SlideShow vars
var slideShowNode; 
var slideShowLength;
var slideShowDirection = 'left';
var slideShowInterval = 10000;

dojo.addOnLoad(function() {
	dojo.query("select").forEach(textSelector);
	dojo.connect(dojo.byId('RegisterUser'), 'click', regUser);
	dojo.query('.registerUser').onclick(regUser);
	dojo.connect(dojo.byId('friend_refer'), 'click', friendRefer);
	dojo.query('#HomepageSlideShow').forEach(function (slideShow) {
		setTimeout('slideShow()', 10000);
	});
});

function slideShow() {
	var node = dojo.byId('HomepageSlideShow');
	dojo.forEach (node.childNodes, function(image) {
		if (image.tagName == 'A') {
			if (image.style.zIndex == 99) {
				var slideArgs = {
			        node: image,
			        top: (dojo.coords(image).t).toString(),
			        left: -283,
			        duration: 2000,
			        easing: dojo.fx.easing.quadOut,
			        unit: "px",
			        onEnd: function() {
			        	var images = dojo.query('.homepageImage').forEach(function(element) {
			        		zIndex = parseFloat(element.style.zIndex) + 1;
			        		element.style.zIndex = zIndex;
			        	});
			        	image.style.left = 0;
			        	image.style.zIndex = 99 - images.length + 1;
			        	setTimeout('slideShow()', 10000);
			        	
			        }
			    };
			    dojo.fx.slideTo(slideArgs).play();
			}
		}
	});
}

function normaliseEvent(event) {
	dojo.stopEvent(event);
	if (typeof event.target != "undefined") {      
		targetElement = event.target;
	} else {      
		targetElement = event.srcElement;
	}
	return targetElement;
}

function regUser(event) {
	if (!typeof event == undefined) {
		normaliseEvent(event);
	}
	
	var formElements = {
			'list': [
			       {type: 'text', name: 'email', title: 'Email:', style: 'wide'}, 
                   {type: 'password', name: 'password', title: 'Password:', style: 'narrow', description: '6 - 32 characters'},
			       {type: 'password', name: 'password_confirmation', title: 'Password confirmation:', description: '', style: 'narrow'},
			       {type: 'text', name: 'display_name', title: 'Display name:', style: 'narrow', description: '4 - 64 characters'},
                   {type: 'checkbox', name: 'reports', title: 'Send me weekly reports:', description: '', style: 'narrow'},
                   {type: 'text', name: 'domains', title: 'Domain name you own:', description: 'Must begin with http:// or https://', style: 'wide'}
              ]};
	var userPromptForm = createForm(formElements, 'userPromptForm');
	
	var registerUser = function() {
		// Create a string from all domains the user has added
		var userDomains = '';
		dojo.query('SPAN', dojo.byId('PromptDomainsDiv')).forEach(function(span, i) {
			userDomains += span.innerHTML;
			if ((i + 1) < dojo.query('SPAN', dojo.byId('PromptDomainsDiv')).length) {
				userDomains += '|';
			} 
		});
		// Add the domain in the domain input
		if (dojo.byId('new_domain_url').value) {
			if (userDomains != '') {
				userDomains += '|';
			}
			 userDomains += dojo.byId('new_domain_url').value;
		}
		
		// Check if reports is checked and if it is set value to 1
		// needs to look for type checkbox due to bug in IE7
		dojo.query('input[type=checkbox]').forEach(function(n) {
			if (n.name == 'reports') {
				if (n.checked == 1 || n.checked == true) {
					n.value = 1;
				} else {
					n.value = 0;
				}
			}
		});
		
		var data = {};
		data['action'] = 'registerUser';
		dojo.query('input', dojo.byId('userPromptForm')).forEach(function(input) {
			if (input.name != 'domains') {
				data[input.name] = input.value;
			}
		});
		data['domains'] = userDomains;
		
		
		var response = sendData(data);
		
		if (response.status == 1) {
			// If at end of the build process, then move to process
			// Otherwise, stay on the same page
			
			if (userLocation == 'finisheBuild') {
				window.location = '/Process';
			} else {
				changeControls();
				if (userLocation == 'build') {
					dojo.byId('userPromptFormInner').innerHTML = 'Thank you for registering with SiteAmplifier.net.<br /><br />This window will close in 5 seconds.<br /><br />';
					setTimeout("closePopup()", 5000);
				} else {
					dojo.byId('userPromptFormInner').innerHTML = 'Thank you for registering with SiteAmplifier.net.<br /><br />You will be redirected to the Build process in 5 seconds.<br /><br />';
					setTimeout("window.location = '/Start/BuildAd'", 5000);
				}
			}
		} else {
			var errors = '';
			dojo.forEach(response.errors, function(error) {
				errors += error + '\n';
			});
			alert(errors);
		}
	};
	
	var registerPopup = new popup({
		title: 'Register',
		content: userPromptForm,
		allowLogin: allowLogin,
		callback: registerUser
	});
	registerPopup.run();
}

function login(event) {
	normaliseEvent(event);
	
	var formAction = event.target.id;
	
	var userDomains = '';
	dojo.forEach(dojo.query('#UserPrompotDomainsDiv > *'), function(element, i, arr) {
		userDomains += element.id;
		if ((i + 1) < dojo.byId('UserPrompotDomainsDiv').children.length) {
			userDomains += '|';
		}
	});
	if (dojo.byId('new_domain_url').value) {
		if (userDomains != '') {
			userDomains += '|'
		}
		userDomains += dojo.byId('new_domain_url').value;
	}
	
	var data = {action: formAction, domains: userDomains, email: dojo.byId('email').value, password: dojo.byId('password').value};
	var response = sendData(data);
	
	if (response.status == 1) {
		window.location = '/Process';
	} else {
		var errors ='';
		dojo.forEach(response.errors, function (error) {
			errors += error + '\n';
		})
		alert (errors);
	}
}

function popup(args) {
	this.height = (args.height) ? args.height : '100';
	this.title = args.title;
	this.content = args.content;
	this.allowLogin = (args.allowLogin) ? args.allowLogin : false;
	this.callback = (args.callback) ? args.callback : null;
		
	this.run = function () {
		var body = dojo.body();
		var overlay = dojo.doc.createElement('div');
		overlay.id = 'Overlay';
		dojo.style(overlay, {
			opacity: '0.5'
		});
		dojo.place(overlay, body, 'first');
		
		// Create the prompt div
		var promptDiv = dojo.doc.createElement('div');
		promptDiv.id = 'Prompt';
		dojo.style(promptDiv, {
			minHeight: this.height +'px',
			//margin: (-this.height / 2) + 'px 0px 0px -216px',
			opacity: '1'
		});
		dojo.place(promptDiv, overlay, 'after');
		// Create the inner div
		var promptInner = dojo.doc.createElement('div');
		promptInner.id = 'PromptInner';
		dojo.place(promptInner, promptDiv, 'first');
		
		// Create header
		var promptHeader = dojo.doc.createElement('div');
		promptHeader.id = 'PromptHeader';
		var promptHeaderTitle = dojo.doc.createElement('span');
		promptHeaderTitle.className = 'PromptHeaderTitle';
		promptHeaderTitle.innerHTML = this.title;
		var prompotHeaderClose = dojo.doc.createElement('a');
		prompotHeaderClose.className = 'PrompotHeaderClose';
		prompotHeaderClose.href = "#";
		prompotHeaderClose.innerHTML = '&nbsp;';
		dojo.connect(prompotHeaderClose, 'click', closePopup);
		// ...and place
		dojo.place(promptHeader, promptInner, 'first');
		dojo.place(promptHeaderTitle, promptHeader, 'first');
		dojo.place(prompotHeaderClose, promptHeader, 'last');
		
		// create content div...
		var contentDiv = dojo.doc.createElement('div');
		contentDiv.id = 'PromptContent';
		dojo.place(this.content, contentDiv, 'first');
		dojo.place(contentDiv, promptInner, 'last');
		// create a clear break element...
		var br = dojo.doc.createElement('br');
			dojo.style(br, 'clear', 'both');
		// ... and place.
		dojo.place(br, contentDiv, 'last');
		
		
		// Create controls div...
		var promptControls = dojo.doc.createElement('div');
			promptControls.id = 'PromptControls';
		// ... place ...
		dojo.place(promptControls, contentDiv, 'last');
		if (this.callback != null) {
			// ... create the OK button...
			var promptOk = dojo.doc.createElement('a');
				promptOk.id = 'ButtonOK';
				promptOk.href = '#';
				promptOk.innerHTML = '&nbsp;';
				promptOk.className = 'buttonOk';
			// ... and place ...
			dojo.place(promptOk, promptControls, 'last');
			okConnection = dojo.connect(promptOk, 'click', args.callback);
		
			// ... create the cancel button...
			var promptCancel = dojo.doc.createElement('a');
				promptCancel.id = 'ButtonCancel';
				promptCancel.href = '#';
				promptCancel.innerHTML = '&nbsp;';
				promptCancel.className = 'buttonCancel';
				closeConnection = dojo.connect(promptCancel, 'onclick', closePopup);
			// ... and place ...
			dojo.place(promptCancel, promptOk, 'after');
		} else {
			// Create a close button
			var promptClose = dojo.doc.createElement('a');
			promptClose.id = 'ButtonClose';
			promptClose.href = '#';
			promptClose.innerHTML = '&nbsp;';
			promptClose.className = 'buttonClose';
			dojo.connect(promptClose, 'onclick', closePopup);
			// ... and place ...
			dojo.place(promptClose, promptControls, 'first');
			
			// and center it all
			dojo.style(promptClose, {marginLeft: '60px'});
		}
		// ... create a break element...
		var br = dojo.doc.createElement('br');
			dojo.style(br, 'clear', 'both');
		// ... and place.
		dojo.place(br, promptControls, 'after');
		
		if (this.allowLogin == true) {
			// Create login div...
			var promptLoginDiv = dojo.doc.createElement('div');
				promptLoginDiv.id = 'PromptLoginDiv';
				promptLoginDiv.innerHTML = 'Already a member?&nbsp;';
			// ... place...
			dojo.place(promptLoginDiv, contentDiv, 'last');
			// ... create the login link...
			var promptLoginLink = dojo.doc.createElement('a');
			promptLoginLink.id = 'memberLogin';
			promptLoginLink.href = '#';
			promptLoginLink.innerHTML = 'Log in and save ad';
			dojo.connect(promptLoginLink, 'click', login);
			// ... place...
			dojo.place(promptLoginLink, promptLoginDiv, 'last');
			// ... create a break element...
			var br = dojo.doc.createElement('br');
				dojo.style(br, 'clear', 'both');
			// ... and place.
			dojo.place(br, promptLoginDiv, 'after');
		}
		
		// Calculate the height of the window to centre it on the screen
		var popupDimensions = dojo.marginBox(promptDiv);
		
		dojo.style(promptDiv, {
			margin: ((-popupDimensions.h  / 2) - 50) + 'px 0px 0px -216px'
		});
		
		// If escape is pressed, close popup
		keyListener = dojo.connect(body, 'onkeydown', function(event){
			if(event && event.keyCode == 27){
				closePopup(event);
		    }
		});
	}
}

function closePopup(event) {
	if (!typeof event == undefined) {
		normaliseEvent(event);
	}
	dojo.disconnect(keyListener);
	dojo.query('#Prompt').orphan();
	dojo.query('#Overlay').orphan();
}

function changeControls() {
	dojo.disconnect(okConnection);
	dojo.disconnect(closeConnection);
	
	dojo.byId('PromptControls').innerHTML = '<img src="/images/layout/trans.gif" height="10" width="50" alt="placeholder" style="float: left;" />';
	var promptClose = dojo.doc.createElement('a');
	promptClose.id = 'ButtonClose';
	promptClose.href = '#';
	promptClose.innerHTML = '&nbsp;';
	promptClose.className = 'buttonClose';
	dojo.connect(promptClose, 'onclick', closePopup);
	// ... and place ...
	dojo.place(promptClose, dojo.byId('PromptControls'), 'last');
}

function createForm(formElements, formName) {
	var form = dojo.doc.createElement('form');
		form.method = 'post';
		form.action = '/Login';
		form.name = formName;
		form.id = formName;
		dojo.style(form, 'float', 'left');
	var formInner = dojo.doc.createElement('div')
		formInner.id = 'userPromptFormInner';
		dojo.style(formInner, {
			width: '100%',
			float: 'left'
		});
	dojo.place(formInner, form, 'first');
	
	var createDomainsDiv = 0;
	
	dojo.forEach(formElements.list, function(element) {
		// create FieldSet...
		var fieldSet = dojo.doc.createElement('div');
			fieldSet.className = 'fieldSet';
		// ... and place.
		dojo.place(fieldSet, formInner, 'last');
			
		// create Label...
		var formLabel = dojo.doc.createElement('div');
			formLabel.className = 'formLabel noBold';
			formLabel.innerHTML = element.title + '<br />' ;
		// ... and description... 
		if (element.description) {
			var formDescription = dojo.doc.createElement('span');
			formDescription.className = 'formDescription';
			formDescription.innerHTML = element.description;
			dojo.place(formDescription, formLabel, 'last');
		}
		// ... and place.
		dojo.place(formLabel, fieldSet, 'first');
			
		// create formInput div...
		var formInput = dojo.doc.createElement('div');
			formInput.className = 'formInput';
			
		// and Input element...
		switch (element.type) {
			case 'textarea':
				var input = dojo.doc.createElement('textarea');
				input.name = element.name;
				input.id = element.name;
				dojo.style(formInput, {
					paddingBottom: '10px',
					float: 'left'
				});
			break;
			
			default: 
				var input = dojo.doc.createElement('input');
					input.type = element.type;
					input.name = element.name;
					input.id = element.name;
					
					if (element.name == 'reports') {
						input.setAttribute('value', 1);
						input.setAttribute('checked', true);
						input.checked = "checked";
						input.defaultChecked = true;
				 	}
			break;
		}
		if (element.content) {
			input.value = element.content;
		}
		// Style the input
		if (element.style == 'narrow') {
			input.className = 'formInputNarrow';
		} else {
			input.className = 'formInput'
		}
		
		// ... place Input...			
		dojo.place(input, formInput, 'first');
		
		if (element.name == 'domains') {
			input.id = 'new_domain_url';
			if (userDomain != '') {
				input.value = userDomain;
			}
			// create the add domain element
			var domainAdd = dojo.doc.createElement('a');
			domainAdd.className = 'promptDomainAdd';
			domainAdd.href = '#';
			domainAdd.innerHTML = '&nbsp;';
			dojo.place(domainAdd, input, 'after');
			dojo.connect(domainAdd, 'click', addDomain);
			
			createDomainsDiv = 1;
		}
		
		// ... and place formInput div.
		dojo.place(formInput, formLabel, 'after');
		
		// create a clear break element...
		var br = dojo.doc.createElement('br');
			dojo.style(br, 'clear', 'both');
		// ... and place.
		dojo.place(br, fieldSet, 'after');
	});
	
	if (createDomainsDiv == 1) {
		// Create domains div...
		var promptDomainsDiv = dojo.doc.createElement('div');
			promptDomainsDiv.id = 'PromptDomainsDiv';
		// ... and place.
		dojo.place(promptDomainsDiv, formInner, 'last');
	}
	
	return form;
}

function friendRefer(event) {
	if (event) {
		normaliseEvent(event);
	}
	
	// Create the registration form
	var formElements = {
			'list': [
			       {type: 'text', name: 'members_name', title: 'Your Name:'}, 
                   {type: 'text', name: 'friends_name', title: 'Your friend\'s name:'},
			       {type: 'text', name: 'friends_email', title: 'Friend\'s email address:'},
			       {type: 'textarea', name: 'message', title: 'Your message:', content: 'I am using SiteAmplifier.net and I think you might like it too.'}
              ]};
	
	var referForm = createForm(formElements, 'refer_form');
	
	var div = dojo.doc.createElement('div');
	div.innerHTML = 'To refer a friend to SiteAmplifier, please fill the form below. Once your friend registers with SiteAmplifier both of you will receive 2,000 bonus points.<br /><br />All fields in the form are required.<br /><br />';
	dojo.place(referForm, div, 'last');
	
	var sendMessage = function() {
		form = dojo.byId('refer_form');
		var data = {action: 'refer'};
		data['members_name'] = dojo.byId('members_name').value;
		data['friends_name'] = dojo.byId('friends_name').value;
		data['friends_email'] = dojo.byId('friends_email').value;
		data['message'] = dojo.byId('message').value;
		
		if (data['members_name'] == '' || data['friends_name'] == '' || data['friends_email'] == '' || data['message'] == '') {
			alert('All fields are required!');
		} else {
			var response = sendData(data);
				
			if (response.status == -1) {
				alert (response['error']);
			} else {
				div.innerHTML = 'Thank you for referring your friend to us. The email has been sent.<br /><br />';
				changeControls();
			}
		}
	}
	
	var referPopup = new popup({
		title: 'Refer a friend to SiteAmplifier.net',
		content: div,
		callback: sendMessage
	});
	referPopup.run();
	
}

function submitRefer(event) {
	normaliseEvent(event);
	var data = {};
	dojo.query('INPUT', 'refer_form_inner').forEach(function (n) {
		data[n.name] = n.value;
	});
	dojo.query('TEXTAREA', 'refer_form_inner').forEach(function (n) {
		data[n.name] = n.value;
	});
	
	data['action'] = 'refer';
	dojo.xhrPost({
		url: '/API',
		content: data,
		handleAs: 'text',
		load: function (response) {
			alert (response);
			return response;
		},
		error: function (response) {
			alert (response);
		}
	});
}


function sendData(data) {
	var response;
	dojo.xhrPost({
		url: '/API',
		content: data,
		handleAs: 'json',
		sync: true,
		load: function (xhrResponse) {
			response = xhrResponse;
			return xhrResponse;
		},
		error: function (response) {
			alert (response)
		}
	});
	return response;
}

function testData(data) {
	var response;
	dojo.xhrPost({
		url: '/Api',
		content: data,
		handleAs: 'text',
		sync: true,
		load: function (xhrResponse) {
			alert (xhrResponse);
			return xhrResponse;
		},
		error: function (response) {
			alert (response)
		}
	});
	return response;
}


function addDomain(event) {
	normaliseEvent(event);
	var promptDomainsDiv = dojo.byId('PromptDomainsDiv');
	var domainName = dojo.byId('new_domain_url').value;
	
	var data = {action: 'checkUrl', url: domainName};
	var response = sendData(data);
	
	if (response.status == 1) {
		// Check that a user isn't trying to add a domain twice
		var error = {status : 0};
		// TODO return top level domain, insert it, and compare with new domains to reduce breakage.
		dojo.query('.promptDomainUrl', promptDomainsDiv).forEach(function(domainUrl) {
			if (domainName == domainUrl.innerHTML) {
				error['status'] = 1;
				error['message'] = 'You cannot add the same domain name' 
			}
		});
		
		if (error['status'] == 0) {
			// create domains divs
			var domainDiv = dojo.doc.createElement('div');
				domainDiv.className = 'promptDomainDiv';
			dojo.place(domainDiv, promptDomainsDiv, 'last');
			var domainURL = dojo.doc.createElement('span');
				domainURL.className = 'promptDomainUrl';
				domainURL.innerHTML = domainName;
			dojo.place(domainURL, domainDiv, 'first');
			
			var domainDelete = dojo.doc.createElement('a');
				domainDelete.className = 'prompotDomainDelete';
				domainDelete.href = '#';
				domainDelete.innerHTML = '&nbsp;';
				dojo.connect(domainDelete, 'click', removeDomain);
			dojo.place(domainDelete, domainDiv, 'last');
			
			var domainName = dojo.byId('new_domain_url').value = '';
		} else {
			alert(error.message)
		}
	} else {
		var errors ='';
		dojo.forEach(response.errors, function (error) {
			errors += error + '\n';
		})
		alert (errors);
	}
}

function removeDomain(event) {
	normaliseEvent(event);
	dojo.query(targetElement).parent().orphan();
}

function textSelector(event) {
	// Change the name and Id of the current. 
	// Has to be done first to overcome IE misfunctionality with select options once the select element has gone.
	var elementOldId = event.id;
	var elementNewId = elementOldId + '_select';
	event.id = event.name = elementNewId;
	
	var options = dojo.byId(elementNewId).options;
	
	if (!event.parentNode.id) {
		var parentNodeId = event.id + '_parent';
		event.parentNode.id = parentNodeId;
	} else {
		parentNodeId = event.parentNode.id;
	}
	
	// Hide the old element but keep it for future reference.
	dojo.style(elementNewId, 'display', 'none');
	
	
	// Create a fake select element
	var selectText = dojo.doc.createElement('input');
	selectText.type = 'text';
	selectText.id = elementOldId;
	selectText.name = elementOldId;
	selectText.value = event.text == 'undefined' ? event.text : '';
	selectText.className = event.className;
	dojo.connect(selectText, 'change', enterNewOption);
	
	// Create a designed selector
	selectSelector = dojo.doc.createElement('a');
	selectSelector.id = elementOldId + '_selector';
	selectSelector.href = '#';
	selectSelector.name = elementOldId;
	selectSelector.className = 'TextSelector';
	selectSelector.innerHTML = '&nbsp;';
	dojo.connect(selectSelector, 'click', toggleOptions);
	
	// create the options div
	var elementOptions = dojo.doc.createElement('div');
	elementOptions.id = elementOldId + "_options";
	dojo.style(elementOptions, {
		position: 'absolute',
		backgroundColor: 'white',
		border: '1px solid #C1C1C1',
		borderTop: 'none',
		display: 'none',
		zIndex: selectText.style.zIndex + 1
	});
	
	// Add the options into the div
	dojo.forEach(options, function(option) {
		if (option.text) {
			// check if this options is selected and set it as such
			if (option.selected) {
				selectText.value = option.text;
			}
			
			// Create the option as an anchor
			var currOption = dojo.doc.createElement('a');
			currOption.href = '#';
			currOption.name = option.value;
			currOption.name = elementOldId + '|' + option.value;
			currOption.innerHTML = option.text;
			currOption.className = 'selectOption';
			dojo.style(currOption, {
				width: '100%'
			});
			
			// Connect the anchor to a select function
			dojo.connect(currOption, 'click', selectOption);
			
			// Place the anchor
			dojo.place(currOption, elementOptions, 'last');
		}
	});
	
	// Remove select element and insert new stylised element
	//event.parentNode.innerHTML = '';
	dojo.place(selectText, parentNodeId, 'first');
	dojo.place(selectSelector, parentNodeId, 'last');
	
	// Get select element position
	var e1=selectText, e2=selectText;
	var x=0, y=0;
	if(e1.offsetParent) {
		do {
			x += e1.offsetLeft;
			y += e1.offsetTop;
		} while(e1 = e1.offsetParent);
	}
	while((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
		x -= e2.scrollLeft;
		y -= e2.scrollTop;
	}
	
	var foo = selectText;
	while((foo = foo.parentNode) && foo.nodeName.toUpperCase() !== 'BODY') {
		var bar = foo.id;
	}
	
	dojo.style(elementOptions, {
		left: x + 'px',
		top: (y + selectText.offsetHeight - 1) + 'px',
		width: (selectText.offsetWidth - 2) + 'px'		
	});
	
	
	dojo.place(elementOptions, dojo.body(), 'first');
}

function selectOption(event) {
	//dojo.stopEvent(event);
	normaliseEvent(event);
	
	var vars = targetElement.name.split('|');
	dojo.byId(vars[0]).value = vars[1];
	dojo.byId(vars[0] + '_select').value = vars[1];
	dojo.byId(vars[0] + '').value = event.target.innerHTML;
	dojo.style(vars[0] + '_options', {
		display: 'none'
	});
	dojo.byId(vars[0] + '_selector').className = 'TextSelector';
	
	// Update the domain categories
	if (vars[0] == 'url') {
		var data = {action: 'getCategories', url: vars[1]};
		dojo.xhrPost({
			url: '/API',
			content: data,
			handleAs: 'json',
			load: function (response) { 
				dojo.query("input[type='checkbox']").forEach(function(cb) {
					var check = false;
					for (var i = 0; i< response.length; i++) {
						if (response[i] == cb.value) {
							check = true;
						} 
						cb.checked = check;					
					}
				});
				
				return response;
			},
			error: function (response) {
				alert (response);
			}
		});
	}
}

function enterNewOption(event) {
	var elementName = event.target.id.split('_')[0];
	dojo.byId(elementName).value = event.target.value;
}

function toggleOptions(event) {
	dojo.stopEvent(event);
	var foo = event.target.name.split('/');
	var optionsDivId = foo[(foo.length - 1)] + '_options';
	if (dojo.byId(optionsDivId).style.display == 'none') {
		dojo.style(optionsDivId, {
			display: 'block'
		});
		event.target.className = 'TextSelectorOn';
	} else if (dojo.byId(optionsDivId).style.display == 'block') {
		dojo.style(optionsDivId, {
			display: 'none'
		});
		event.target.className = 'TextSelector';
	}
}

function numerise(string) {
	if (!string) {
		string = "0";
	}
	return parseFloat(string.replace(/[^\d\.\-\ ]/g, ''));
}
