function go_to_number(e) {
	if (parseInt($F('search_box')) > 1000000)
		handle_error('no_stock');
	else if ($F('search_box') != '')
		window.open(WWW + '/number/' + parseInt($F('search_box')) + '/', '_self');
	Event.stop(e);
	return false;
}

function check_number(e) {
	var obj = $('search_box');
	var val = $F(obj);
	if (e.which && e.which != 8 && (e.which < 48 || e.which > 57) ||
	e.keyCode && e.keyCode != 8 && (e.keyCode < 48 || e.keyCode > 57)) {
		Event.stop(e);
		return false;
	}
}

function toggle_owner_options(e) {
	var obj = $('owner_options');
	if(obj.getStyle('background-image') == 'url('+WWW+'/css/images/owner_options.png)')
		obj.setStyle({'background-image': 'url('+WWW+'/css/images/owner_options_hide.png)'});
	else
		obj.setStyle({'background-image': 'url('+WWW+'/css/images/owner_options.png)'});
		
	Effect.toggle('owner_form', 'blind');
	Event.stop(e);
	return false;
}

function highlight_owners_badge_text(e) {
	$('owners_badge_text').select();
}

function handle_error(error) {
	var qry = document.URL.toQueryParams();
	var message;

	if (error == null) {
		if (!qry.error)
			return;
		error = qry.error;
	}

	switch (error) {
	case 'db':
		message = 'A database error has occured. Please try again in a few moments.';
		break;
	case 'pass_mismatch':
		message = 'The passwords that you supplied do not match.';
		break;
	case 'pass_length':
		message = 'The password that you supplied is too short. Passwords must be between 6 and 24 characters long.';
		break;
	case 'owner_name':
		message = 'You did not supply a name for yourself';
		break;
	case 'owner_name_too_long':
		message = 'Please supply a name for yourself that is 64 characters long or less.';
		break;
	case 'url':
		message = 'The URL you provided is invalid.<br />Be sure to prefix it with an "http://".';
		break;
	case 'description_length':
		message = "Please supply an owner's statement that is 1024 characters long or less.";
		break;
	case 'pass_incorrect':
		message = 'The password that you supplied is incorrect. Please try again.';
		break;
	case 'already_purchased':
		message = 'Sorry! Somebody beat you to the punch and bought this number already!';
		break;
	case 'wait':
		message = "Sorry! You can't purchase a new number just yet.";
		break;
	case 'no_stock':
		message = 'Sorry! We only have the numbers 1 through 1,000,000 in stock.';
		break;
	default:
		message = 'An unknown error has occured. Please try again in a few moments.';
		break;
	}

	alert_window('ERROR', message, 'OK');
}

function alert_window(title, message, button_text) {
	var blocker = $('alert_blocker');
	var box = $('alert_box');
	if (!blocker) {
		blocker = document.createElement('div');
		Element.extend(blocker);
		blocker.id = 'alert_blocker';
		blocker.setStyle({position: 'fixed', left: 0, top: 0, height: '100%', width: '100%', display: 'none', opacity: 0.5, backgroundColor: 'black'});
		document.body.appendChild(blocker);
	}
	if (!box) {
		box = document.createElement('div');
		Element.extend(box);
		box.id = 'alert_box';
		box.setStyle({display: 'none'});
		var header = document.createElement('h2');
		header.id = 'alert_box_header';
		box.appendChild(header);
		var body = document.createElement('div');
		body.id = 'alert_box_body';
		box.appendChild(body);
		var ok = document.createElement('button');
		Element.extend(ok);
		ok.id = 'alert_box_button';
		ok.observe('click', function(e) {
			Effect.Fade('alert_box', {duration: 0.5, afterFinish: function() { $('alert_blocker').hide()}});
		});
		box.appendChild(ok);
		document.body.appendChild(box);
	}

	if (title)
		$('alert_box_header').innerHTML = title;
	if (message)
		$('alert_box_body').innerHTML = message;
	if (button_text)
		$('alert_box_button').innerHTML = button_text;

	blocker.show();
	Effect.Appear(box, {duration: .5});
}

function validate_purchase_form(e) {
	var url = $F('url').strip();
	if ($F('owner').strip() == '') {
		handle_error('owner_name');
		Event.stop(e);
		return false;
	}
	else if ($F('owner').strip().length > 64) {
		handle_error('owner_name_too_long');
		Event.stop(e);
		return false;
	}
	else if (url != '' && url != 'http://' && !url.match(/https?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/i)) {
		handle_error('url');
		Event.stop(e);
		return false;
	}
	else if ($F('description').length > 1024) {
		handle_error('description_length');
		Event.stop(e);
		return false;
	}
	else if ($F('password1').length < 6 || $F('password1').length > 24) {
		handle_error('pass_length');
		Event.stop(e);
		return false;
	}
	else if ($F('password1') != $F('password2')) {
		handle_error('pass_mismatch');
		Event.stop(e);
		return false;
	}
}

function validate_owner_form(e) {
	var url = $F('url').strip();
	if ($F('owner').strip() == '') {
		handle_error('owner_name');
		Event.stop(e);
		return false;
	}
	else if ($F('owner').strip().length > 64) {
		handle_error('owner_name_too_long');
		Event.stop(e);
		return false;
	}
	else if (url != '' && url != 'http://' && !url.match(/https?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/i)) {
		handle_error('url');
		Event.stop(e);
		return false;
	}
	else if ($F('description').length > 1024) {
		handle_error('description_length');
		Event.stop(e);
		return false;
	}
	else if ($F('password').length < 6 || $F('password').length > 24) {
		handle_error('pass_length');
		Event.stop(e);
		return false;
	}
	else if ($F('password1') != '' && ($F('password1').length < 6 || $F('password1').length > 24)) {
		handle_error('pass_length');
		Event.stop(e);
		return false;
	}
	else if ($F('password1') != $F('password2')) {
		handle_error('pass_mismatch');
		Event.stop(e);
		return false;
	}
}

Event.observe(window, 'load', function() {
	Event.observe('search', 'submit', go_to_number);
	Event.observe('search_box', 'keypress', check_number);
	if ($('owner_options') != null)
		Event.observe('owner_options', 'click', toggle_owner_options);
	if ($('owner_form') != null)
		Event.observe('owner_form', 'submit', validate_owner_form);
	if ($('owners_badge_text') != null)
		Event.observe('owners_badge_text', 'click', highlight_owners_badge_text);

	handle_error(null);
});
