// JavaScript Document

var settings = {
/*	hideFieldsButton : the path to the hide fields button image*/
	hideFieldsButton : '../../images/hide_fields_button_bg.jpg',
/*	showFieldsButton : the path to the show fields button image*/
	showFieldsButton : '../../images/show_fields_button_bg.jpg',
//	requiredFieldMessage : the message displayed if a required field is left blank
	requiredFieldMessage : 'This field cannot be left blank',
//	invalidEmailMessage : the message displayed if the email given is not valid
	invalidEmailMessage : 'Please provide a valid email address',
//	errorMessage404 : the message displayed if the xhr request recieves a 404 error
	errorMessage404 : 'Sending failed - destination not found',
//	email Regexp : the regular expression used to validate the email field
	emailRegexp : '^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,8})+$'
}


var c = {
	selector : '#contact_form div.extra',
	buttonText : { 
		'out' : settings.hideFieldsButton, 
		'in' : settings.showFieldsButton
	},
	button : '',
	requiredFields : [],
	errors : {
		'requiredField' : settings.requiredFieldMessage,
		'invalidEmail' : settings.invalidEmailMessage
	},
	slideOptions : {transition:500},
	
	hideAll: function(){
		$$(c.selector).each(function(div){
			div = div.getParent();						 
			div.setStyle('display', 'none');
		});
	},
	showAll: function(){
		$$(c.selector).each(function(div){
			div = div.getParent();						 
			div.setStyle('display', 'block');
		});
	},
	slideAllOut: function(){
		$$(c.selector).each(function(div){
			div.slide('out');
		});
		c.hideAll.delay(400);
		c.button.setStyle('background-image', 'url('+c.buttonText['in']+')');
	},
	slideAllIn: function(){
		c.showAll();
		$$(c.selector).each(function(div){
			div.slide('in');
		});
		c.button.setStyle('background-image', 'url(' + c.buttonText.out + ')' );
	},
	toggleForm: function(){
		if(this.getStyle('background-image').contains(c.buttonText.out) ){
			c.slideAllOut();
		}else{
			c.slideAllIn();
		}
		this.blur();
	},
	getRequiredFields: function(){
		var ast, input;
		$$('#contact_form div').each(function(div){
			ast = div.getElement('span');
			input = div.getElement('input') || div.getElement('textarea');
			if( $chk(ast) ){
				c.requiredFields.push(input);
			}
		});
	},
	showLoader: function(){
		$('form_submit').getElement('input').setStyle('display', 'none');
		$('form_submit').getElement('img').setStyle('display', '');
	},
	hideLoader: function(){
		$('form_submit').getElement('img').setStyle('display', 'none');
		$('form_submit').getElement('input').setStyle('display', '');
	},
	onSendFail: function(xhr){
		switch(xhr.status){
			case 404:
				alert(settings.errorMessage404);
				break;
			case 412:
				alert(xhr.responseText);
				break;
			case 500:
				alert(xhr.responseText);
				break;
			default:
				alert('Sending failed');
				break;
		}
	},
	onSendSuccess: function(txt){
		$('contact_form').morph({
								'left':100,
								'top':80,
								'width':10,
								'height':10,
								'opacity':0
								});
		$('contact_form_info').set('text', txt);
	},
	
		
	validate: function(ev){
		new Event(ev).stop();
		var passed = true;
		c.removeValidationErrors();
		c.requiredFields.each(function(el){
			if(el.value.trim() == ''){
				el.title = c.errors.requiredField;
				passed = false;
				el.getParent().addClass('field_with_errors');
				//el.morph('.field_with_errors');
			}
			if(el.name == 'email' && !el.value.test(settings.emailRegexp, 'i') ){
				el.title = c.errors.invalidEmail;
				passed = false;
				el.getParent().addClass('field_with_errors');
			}
		});
		if(passed){
			$('contact_form').send();
		}else{
			c.showValidationErrors();
		}
		
	},
	showValidationErrors: function(){
		var div, input;
	   $$('.field_with_errors').each(function(el){
			div = new Element('p');
			input = el.getElement('input') || el.getElement('textarea');
			div.set('text',input.title);
			div.inject(el, 'top');
		});
	},
	removeValidationErrors: function(){
		var p;
		$$('.field_with_errors').each(function(el){
			el.removeClass('field_with_errors');								   
			p = el.getElement('p');
			if( $chk(p) ) p.dispose();
		});
	},
	resetAllStyles: function(){
		c.removeValidationErrors()
		c.hideLoader();
	},
	
	beginHide: function(){
		$$(c.selector).each(function(div){
			div.slide('out');
		});
		c.hideAll.delay(400);
	},
				
	
	init: function(){
		c.button = $('form_toggle_button');
		if(c.button)
			c.button.addEvent('click', c.toggleForm);
		if(!c.button)	
		c.beginHide.delay(100);
		if(c.button)
			c.button.setStyle('background-image', 'url('+c.buttonText['in']+')');
			
		c.getRequiredFields();
		$('contact_form').addEvent('submit', c.validate);
		$('contact_form').set('send', {onRequest: c.showLoader, onComplete: c.hideLoader, onFailure:c.onSendFail, onSuccess:c.onSendSuccess} );
		$('contact_form').set('morph', {duration:1000, transition:'circ:in'} );
		$('form_clear').addEvent('click', c.resetAllStyles);
	}
}

window.addEvent('domready', c.init);
				
	
