//define reg_exps
var name_regexp = /^[a-zA-Z \'\-]+$/;
var email_regexp = /^[^@ ,]+@[^@ ,]+\.[a-zA-Z]{2,10}$/;
var telephone_regexp = /^[0-9 \(\)\[\]\{\}\-\+]+$/;
var message_regexp = /^[\s\S]+$/;

//hide the HTML selector, show the DHTML selector
if( $('callback_when') ) { //if this element exists -i.e. not just processed a request
	
	$('callback_when').style.display = 'none';
	$('fake_callback_when').style.display = 'block';
	$('more_space_link').style.display = 'block';

	//if the form items are filled in then validate
	if( $('name').value.length > 0 ) validate_input( $('name'), name_regexp );
	if( $('email').value.length > 0 ) validate_input( $('email'), email_regexp );
	if( $('telephone').value.length > 0 ) validate_input( $('telephone'), telephone_regexp );
	if( $('company').value.length > 0 ) validate_input( $('company'), message_regexp );
	if( $('callback_name').value.length > 0 ) validate_input( $('callback_name'), name_regexp );
	if( $('callback_telephone').value.length > 0 ) validate_input( $('callback_telephone'), telephone_regexp );
	
	//stop the enter key submitting the form
	$('name').onkeypress = cancel_enter;
	$('email').onkeypress = cancel_enter;
	$('telephone').onkeypress = cancel_enter;
	$('company').onkeypress = cancel_enter;
	
	//init the RTEs
	tinyMCE.init({
		theme : "advanced",
		theme_advanced_layout_manager : "RowLayout",
		theme_advanced_containers_default_align : "left",
		theme_advanced_container_basicbuttons : "bold,italic,underline,|,copy,paste,undo,|,bullist,numlist",
		theme_advanced_containers : "basicbuttons,mceEditor",
		theme_advanced_toolbar_location : "top",
		plugins : "paste",
		mode : "textareas",
		init_instance_callback : "focus_first"
	});

}

function focus_first() {

	$('name').focus();

}

function cancel_enter( e ) {
	var key_pressed = window.event ? window.event.keyCode : e.which;
	if( key_pressed == 13 ) return false; //if enterr
}

function validate_input( elm, reg_exp ) {

	$(  elm.id + '_result' ).src = 'images/' + ( elm.value.length == 0 ? 'spacer' : ( elm.value.match( reg_exp ) ? 'tick' : 'cross' ) ) + '.png';
	
}

function check_quote_form() {

	var name = $('name').value;
	var email = $('email').value;
	var telephone = $('telephone').value;
	var message = $('message').value;
	
	//check everything
	if( name.length == 0 ) show_error( 'name', 'quote' );
	else if( !name.match( name_regexp ) ) show_error( 'name_invalid', 'quote' );
	else if( email.length > 0 && !email.match( email_regexp ) ) show_error( 'email_invalid', 'quote' );
	else if( telephone.length == 0 ) show_error( 'telephone', 'quote' );
	else if( !telephone.match( telephone_regexp ) ) show_error( 'telephone_invalid', 'quote' );
	//else if( message.length == 0 || message.value == '<br>' ) show_error( 'message', 'quote' );
	else return true;

	return false;

}

function check_callback_form() {

	var name = $('callback_name').value;
	var telephone = $('callback_telephone').value;
	
	//check everything
	if( name.length == 0 ) show_error( 'name', 'callback' );
	else if( !name.match( name_regexp ) ) show_error( 'name_invalid', 'callback' );
	else if( telephone.length == 0 ) show_error( 'telephone', 'callback' );
	else if( !telephone.match( telephone_regexp ) ) show_error( 'telephone_invalid', 'callback' );
	else return true;

	return false;

}

function show_error( type, form ) {

	close_callback();

	set_opacity( $('mask'), 0 );
	fade( $('mask'), 0, 100 );
	setTimeout( function() {
		$('error_container').style.visibility = 'visible';
	}, 400 );

	var msg =
		 "Sorry, your " + form + " request couldn't be sent just then because there was a problem, detailed below. " + 
		'Please review this and <a href="#" onclick="close_error(); return false;" class="plain">click here</a> ' + 
		"to go back and try again.<br /><br /><strong>";

	switch( type ) {
		
		case 'name': msg+= "You didn't enter a contact name."; break;
		case 'name_invalid': msg+= "You didn't enter a valid contact name. A contact name should only contain letters, spaces, hyphens and single quote marks."; break;
		case 'email_invalid': msg+= "You didn't enter a valid email address. An email address should be in the format yourname@something.com"; break;
		case 'telephone': msg+= "You didn't enter a contact telephone number."; break;
		case 'telephone_invalid': msg+= "You didn't enter a valid contact telephone number. <br />A telephone number should only contain numbers, <br />spaces and, if needed, hyphens and brackets."; break;
		case 'message': msg+= "You didn't enter a message. Please leave a short message telling us briefly about the work you need quoting for."; break;

	} //end switch

	msg+= '</strong>'

	$('error_container_txt').innerHTML = msg;

}

function close_error() {
	
	$('error_container').style.visibility = 'hidden';
	fade( $('mask'), 100, 0 );

}

function set_callback( v ) {

	$('callback_when').value = v;
	$('callback_options').style.visibility = 'hidden';		
	$('fake_callback_when').innerHTML = v;

}

function close_callback() {

	$('callback_options').style.visibility = 'hidden';		

}

function toggle_large_editor() {

	close_callback();
	
	//if the container is showing hide it
	if( $('editor_container').style.visibility == 'visible' ) {
	
		$('editor_container').style.visibility = 'hidden';
		if( tinyMCE.isMSIE ) $('editor_container').style.display = 'none'; //yay - IE sucks!!
		fade( $('mask'), 100, 0 );
	
		//set html
		tinyMCE.getInstanceById('message').getBody().innerHTML = tinyMCE.getContent('message_large');
		//tinyMCE.execCommand( 'mceFocus', false, 'mce_editor_0' )
		//move_cursor_to_the_end('mce_editor_0');
	
	} else { //otherwise show it...
	
		set_opacity( $('mask'), 0 );
		fade( $('mask'), 0, 100 );
		setTimeout(
			function() {
				$('editor_container').style.visibility = 'visible';
				if( tinyMCE.isMSIE ) $('editor_container').style.display = 'block'; //yay - IE sucks!!
				
				//set html and focus
				tinyMCE.getInstanceById('message_large').getBody().innerHTML = tinyMCE.getContent('message');
				tinyMCE.execCommand( 'mceFocus', false, 'mce_editor_1' );
				move_cursor_to_the_end('mce_editor_1');
			}
		, 400 );
	
	}

}
