// Set up page load event
Event.observe( window, 'load', contactus_load );

// Runs on page load
function contactus_load( )
{
	if( $('email_form') != null ) {
		getField( 'topic', 'email_form' ).options[0].selected = true;
		if( $('topic') != null ) {
			$('topic').observe( 'change', topicEvent );
			$('subtopic').observe( 'change', subtopicEvent );
		}
		if( window['default_email'] == null ) {
			//window['default_form_topic'] = $('form_topic').innerHTML;
			//window['default_form_subtopic'] = $('form_subtopic').innerHTML;
			window['default_email_form'] = $('formWrapper').innerHTML;
			window['default_email'] = true;
		}
	}
}

function contactus_submit( )
{
	return validateForm( 'email_form' );
}

function topicEvent( e )
{
	if( getField( 'topic', 'email_form' ).options[0].selected ) {
		if( window['default_email'] ) {
			//$('form_topic').update( window['default_form_topic'] );
			//$('form_subtopic').update( window['default_form_subtopic'] );
			$('formWrapper').update( window['default_email_form'] );
		}
		getField( 'subtopic', 'email_form' ).update( );
		$('questions').hide( );
	} else {
		var topic_id = getField( 'topic', 'email_form' ).options[getField( 'topic', 'email_form' ).options.selectedIndex].value;
		if( window['default_email'] ) {
			//$('form_topic').update( window['default_form_topic'] );
			//$('form_subtopic').update( window['default_form_subtopic'] );
			$('formWrapper').update( window['default_email_form'] );
		}
		getSubtopics( topic_id );
		getQuestions( topic_id );
	}
}

function subtopicEvent( e )
{
	if( getField( 'subtopic', 'email_form' ).options[0].selected ) {
		if( window['default_email'] ) {
			//$('form_topic').update( window['default_form_topic'] );
			//$('form_subtopic').update( window['default_form_subtopic'] );
			$('formWrapper').update( window['default_email_form'] );
		}
	} else {
		var subtopic_id = getField( 'subtopic', 'email_form' ).options[getField( 'subtopic', 'email_form' ).options.selectedIndex].value;
		getEmailForm( subtopic_id );
	}
}

// Contact_third_party event
function third_party_event( e )
{
	var contact_third_model = $('contact_third_model');
	if( getField( 'contact_third_party', 'email_form' ).options[1].selected ) {
		contact_third_model.up('.inputRow').show( );
	} else {
		contact_third_model.up('.inputRow').hide( );
		contact_third_model.value = '';
	}
}

// Subtopic retrieval ajax call
function getSubtopics( topic_id )
{
	var subtopicRequest = new Ajax.Request( '?ajax', {
		method:'get',
		parameters: { 'request':'subtopics', 'topic_id':topic_id },
		onSuccess: function( transport ) {
			var data = transport.responseText.evalJSON( );
			var numEntries = data.length;
			var subtopic_field = getField( 'subtopic', 'email_form' );
			subtopic_field.update( );
			subtopic_field.appendChild( new Element( 'option', { 'value':0 } ).update( '&nbsp;' ) );
			if( numEntries > 0 ) {
				for( var x = 0; x < numEntries; ++x ) {
					subtopic_field.appendChild( new Element( 'option', { 'value':data[x].subtopic_id } ).update( data[x].subtopic ) );
				}
			}
		}
	});
}

// Top questions retrieval ajax call
function getQuestions( topic_id )
{
	var questionRequest = new Ajax.Request( '?ajax', {
		method:'get',
		parameters: { 'request':'questions', 'topic_id':topic_id },
		onSuccess: function( transport ) {
			var data = transport.responseText.evalJSON( );
			var numEntries = data.length;
			if( numEntries > 0 ) {
				$('questions').show( );
				$('question_topic').update( getField( 'topic', 'email_form' ).options[getField( 'topic', 'email_form' ).options.selectedIndex].text );
				var question_list = $('question_list');
				question_list.update( );
				for( var x = 0; x < numEntries; ++x ) {
					question_list.appendChild( new Element( 'li' ).update( new Element( 'a', { 'href':'?support&topic=' + data[x].keyword } ).update( data[x].article ) ) );
				}
			}
		}
	});
}

// Email form retrieval by ajax call
function getEmailForm( subtopic_id )
{
	//$('form_subtopic').show( );
	var emailFormRequest = new Ajax.Request( '?ajax', {
		method:'get',
		parameters: { 'request':'email_form', 'subtopic_id':subtopic_id },
		onSuccess: function( transport ) {
			var data = transport.responseText;
			//$('form_topic').update( getField( 'topic', 'email_form' ).options[getField( 'topic', 'email_form' ).options.selectedIndex].text );
			//$('form_subtopic').update( getField( 'subtopic', 'email_form' ).options[getField( 'subtopic', 'email_form' ).options.selectedIndex].text );
			setFormValidation( 'email_form', true );
			$('formWrapper').update( data );
			if( $('contact_third_party') != null ) {
				$('contact_third_party').observe( 'change', third_party_event );
			}
		}
	});
}

// UTILITY FUNCTIONS

// Allows cached form field retrieval & operations
window['fieldObjList'] = null;
window['fieldObjList'] = [];
function getField( fieldID, formID )
{
	if( formID == null ) {
		formID = 0;
	}
	if( fieldObjList[formID] == null ) {
		fieldObjList[formID] = [];
	}
	if( fieldObjList[formID][fieldID] == null ) {
		if( document.forms[formID] ) {
			if( document.forms[formID].elements[fieldID] ) {
				fieldObjList[formID][fieldID] = document.forms[formID].elements[fieldID];
			}
		}
	}
	return fieldObjList[formID][fieldID];
}

// Validation functions
window['fieldValidation'] = null;
window['fieldValidation'] = [];
function validateForm( formID ) {
	if( fieldValidation[formID] ) {
		var valid=true;
		for( var x = 0; x < fieldValidation[formID].length; ++x ) {
			if( !validate( fieldValidation[formID][x].fieldID, formID, fieldValidation[formID][x].pattern, fieldValidation[formID][x].type, fieldValidation[formID][x].error ) ) {
				valid=false;
			} else {
				fieldValidation[formID][x].valid=true;
			}
		}
		return valid;
	} else {
		return false;
	}
}

function setFormValidation( formID, force ) {
	if( force == null ) {
		force = false;
	}
	if( fieldValidation[formID] && !force ) {
		return;
	} else {
		fieldValidation[formID] = null;
		fieldValidation[formID] = [];
	}
}

function validate(fieldID, formID, pattern, type, error) {
	var empty_error = 'This is a required field.';
	if( error == null ) {
		error = empty_error;
	}
	switch( type ) {
		case 'select':
		if( getField( fieldID, formID ).options.selectedIndex > 0 ) {
			$(fieldID+'_err').hide( );
			return true;
		} else {
			$(fieldID+'_err').update( empty_error ).show( );
			return false;
		}
		break;
		case 'text':
		case 'textarea':
		if( getField( fieldID, formID ).value.length == 0 ) {
			$(fieldID+'_err').update( empty_error ).show( );
		} else if( getField( fieldID, formID ).value.match( pattern ) ) {
			$(fieldID+'_err').hide( );
			return true;
		} else {
			$(fieldID+'_err').update( error ).show( );
			return false;
		}
		break;
		default:
			return false;
		
	}
}