var contact={
	
	formId:'contactForm',
	submitButtonId:'formSubmitButton',
	objs:[
		  {id: 'name', type:'notEmpty', message:'You must give your name'},
		  {id:'emailBox', type:'email', message:'You must give us valid email address'},
		  {id:'message', type:'notEmpty', message:'You must type a message'},
		  {id:'phone', type:'phoneNumber', message:'Please give your phone number, including area code'}
		  ],
	onSend: function(){},
	onSuccess: function(){},
	onValidationFail: function(){},
	onError: function(){},
	toolTips:'',

	errorObjs:[],
  	
	validateEmail: function(address){
		if( address.indexOf('.') != -1 && address.indexOf('@') != -1 ){
			return true;
		}else{
			return false;
		}
	}, 	
	validatePhoneNumber: function(num){
		if( num.length < 11 ) {
			return false;
		}else{
			return true;
		}
	},
 	validateNotEmpty: function(str){
		return str.length == 0 ? false : true;
  	},
	validate: function(ev){
		var e = new Event(ev);
		e.preventDefault();
		var d;
		var r = false;
		contact.errorObjs.length = 0;
		contact.tooltips = '';
		for(var i=0; i<contact.objs.length; i++){
			d = $(contact.objs[i].id).value;
			switch(contact.objs[i].type){
				case false:
					r = true;
					break;
				case 'notEmpty':
					r = contact.validateNotEmpty(d);
					break;
				case 'email':
					r = contact.validateEmail(d);
					break;
				case 'phoneNumber':
					r = contact.validatePhoneNumber(d);
					break;
			}
			if(r == false){	contact.errorObjs.push( { id:contact.objs[i].id, message:contact.objs[i].message } ); }
		}
		if( contact.errorObjs.length > 0 ){ 
			contact.onValidationFail(contact.errorObjs); 
		}else{
			var ajax = new Element('input', { 'type' : 'hidden', 'name' : 'ajax', 'value' : 'true' } );
			ajax.injectInside(contact.formId);
			$(contact.formId).send( { onComplete:contact.onSuccess, onRequest:contact.onSend, onFailure:contact.onError } );
		}
	},
	
	init: function(){
		$(contact.submitButtonId).addEvent('click', contact.validate);
	}
}

contact.onValidationFail = function(objs){
	$$( '#contactForm input, #contactForm textarea' ).setStyle('background-color', '');

	$('form-text').setStyle('display', 'none');
	$('form-validationError').setStyle('display', 'block');
	var ul = $('form-errorList');
	ul.setHTML('');
	for(var i=0; i<objs.length; i++){
		$(objs[i].id).setStyle('background-color', '#99ccff');
		li = new Element('li');
		li.setText( objs[i].message );
		li.injectInside( ul );
		
	}
	ul.injectInside( 'form-validationError' );
}

contact.onSend = function(){
        $$( '#contactForm input, #contactForm textarea' ).setStyle('background-color', '');
	$('form-waiting').setStyles({ 'visibility':'hidden', 'display':'block' });
	new Fx.Style( $('form-waiting'), 'opacity', {transition:Fx.Transitions.linear}).start(0,1);
}

contact.onError = function(){
                 $('form-text').setStyle('display', 'none');
	         $('form-validationError').setStyle('display', 'none');
	         $('form-success').setStyle('display', 'none');
                 $('form-error').setStyle('display', 'block');
                 $('formSubmitButton').setStyle('display', 'none');
	$('formResetButton').setStyle('display', 'block');
	$('formResetButton').addEvent('click', function (){
												$('form-text').setStyle('display', 'block');
												$('form-error').setStyle('display', 'none');
												$('form-success').setStyle('display', 'none');
												$$( 'input, textarea' ).removeProperty('readOnly');	
												$$( 'textarea, input' ).setOpacity(1);	
												$$( '#contactForm p' ).setStyle('display', 'none');
												$( contact.formId ).reset();
												$('formResetButton').setStyle('display', 'none');
                                                                                                  $('formSubmitButton').setStyle('display', 'block'); 
															  });
      new Fx.Style( $('form-waiting'), 'opacity', {transition:Fx.Transitions.linear}).start(1,0);
}

contact.onSuccess = function( ob ){
	$('form-text').setStyle('display', 'none');
	$('form-validationError').setStyle('display', 'none');
	$('form-success').setStyle('display', 'block');
	new Fx.Style( $('form-waiting'), 'opacity', {transition:Fx.Transitions.linear}).start(1,0);
        if( ob == 'Error' ) { 
               contact.onError(); 
        }else{
               $$('input, textarea').setProperty( 'readOnly', 'true' );
		$('formSubmitButton').removeProperty('readOnly');
		$('formResetButton').removeProperty('readOnly');
		if( !window.ie6 ){
                $$('input, textarea').setOpacity( 0.5 );
              
	       $('formResetButton').setOpacity( 1 );
                $('formSubmitButton').setOpacity( 1 );
	     }  

        } 
	$('formSubmitButton').setStyle('display', 'none');
	$('formResetButton').setStyle('display', 'block');
	$('formResetButton').addEvent('click', function (){
												$('form-text').setStyle('display', 'block');
												$('form-validationError').setStyle('display', 'none');
												$('form-success').setStyle('display', 'none');
												$$( 'input, textarea' ).removeProperty('readOnly');	
												$$( 'textarea, input' ).setOpacity(1);		
												$$( '#contactForm p' ).setStyle('display', 'none');
												$( contact.formId ).reset();
												$('formResetButton').setStyle('display', 'none');
                                                                                                $('formSubmitButton').setStyle('display', 'block'); 
															  });
}

window.addEvent('domready', contact.init);
