
/**
 * Error handler, object literal
 *
 * 
 */
errorHandler = {

    showError : function (error) {
        if( ! $chk($('errorMsg'))) {
            var errorDiv  = new Element('div', {id: 'errorMsg', style: 'background-color:red; height:20px; border:2px solid gray; padding:20px;'});
            errorDiv.appendText(error);
            $('PAAppForm').grab(errorDiv);
        }
    },

    hideErrors : function () {
        if( $chk($('errorMsg'))) {
            $('errorMsg').destroy();
        }           
    },
    
    checkDropdowns : function (fieldset) {
    
        errorHandler.hideErrors();
        var fieldsetId = fieldset.get('id').toString();
        var errors = false;
        
        var dropdowns = $$('#'+fieldsetId+' select');
        dropdowns.each(function(dropdown) {
            if(dropdown.get('value').toLowerCase() == '') {
                errorHandler.showError('Please ensure you have completed all questions!');
                errors = true;
            }
        });
        
        return errors;
    }   
}

var isEmpty = new InputValidator('required', {
    errorMsg: 'This field is required.',
    test: function(field){
        return ((field.get('value') == null) || (field.get('value').length == 0) || (field.get('value') == ''));
    }
});

var isNumber = new InputValidator('numeric', {
    errorMsg: 'You must enter a number.',
    test: function(field){
        if(isNaN(field.get('value'))) {
            return false;
        } else {
            return true;
        }
    }
});

var isChecked = new InputValidator('checked', {
    errorMsg: 'You must confirm this field.',
    test: function(field){
        return field.get('checked');
    }
});

function checkTextError(item) {
    if(isEmpty.test(item)) {
        var myFirstElement  = new Element('span', {
            'class':'error', 
            html: 'This field is required'
        });
        item.grab(myFirstElement, 'after');   
        return true;
    }   
};

function checkNumberError(item) {
    if( ! isNumber.test(item)) {
        var myFirstElement  = new Element('span', {'class': 'error', html: 'This field must be numeric'});
        item.grab(myFirstElement, 'after');   
        return true;
    }               
}

function checkCheckboxChecked(item) {
    if( ! isChecked.test(item)) {
        var myFirstElement  = new Element('span', {'class': 'error', html: 'Please confirm this field'});
        item.grab(myFirstElement, 'after');   
        return true;        
    }
}

function checkEmail(email) {

    atPos = email.indexOf("@");
    stopPos = email.lastIndexOf(".");

    if (atPos == -1 || stopPos == -1) {
        return false;
    } else {
        return true;
    }

}

/** 
 * Resets the form
 *
 * @param int {level}
 * @return void
 */
function resetForm(level) {
        
	pageTracker._trackPageview('/candidates_home/');
	
    var continue_buttons = $$('.hidden');
    continue_buttons.each(function(button) {
        button.setStyle('visibility', 'visible');
    });
    
    $('dob_day').addEvent('click', function() {
        $('dob_day').set('value', '');
    });    
    $('dob_month').addEvent('click', function() {
        $('dob_month').set('value', '');
    });    
    $('dob_year').addEvent('click', function() {
        $('dob_year').set('value', '');
    });

    $('date_started_day').addEvent('click', function() {
        $('date_started_day').set('value', '');
    });    
    $('date_started_month').addEvent('click', function() {
        $('date_started_month').set('value', '');
    });    
    $('date_started_year').addEvent('click', function() {
        $('date_started_year').set('value', '');
    });

    $('date_finished_day').addEvent('click', function() {
	
        $('date_finished_day').set('value', '');
    });    
    $('date_finished_month').addEvent('click', function() {
        $('date_finished_month').set('value', '');
    });    
    $('date_finished_year').addEvent('click', function() {
        $('date_finished_year').set('value', '');
    });   
    $('start_date_month').addEvent('click', function() {
        $('start_date_month').set('value', '');
    });    
    $('start_date_year').addEvent('click', function() {
        $('start_date_year').set('value', '');
    });     
        
           
    switch(level) {
        case 1:
            $('nationality_fieldset').setStyle('display', 'none');            
            $('personal_information_fieldset').setStyle('display', 'none');
            $('valid_work_permit').setStyle('display', 'none');
            $('valid_work_permit_label').setStyle('display', 'none');
            $('personal_details_fieldset').setStyle('display', 'none');
            $('prev_employment_fieldset').setStyle('display', 'none');
            $('prev_experience_fieldset').setStyle('display', 'none');
            $('criminal_history_fieldset').setStyle('display', 'none');
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            
            $$('#drink_drugs_details, label[for="drink_drugs_details"],'+
       '#back_problems_details, label[for="back_problems_details"], '+
       '#criminal_record_details, label[for="criminal_record_details"]').setStyle('display', 'none');
            
            break;  
        case 2:   
            $('personal_information_fieldset').setStyle('display', 'none');
            $('personal_details_fieldset').setStyle('display', 'none');
            $('prev_employment_fieldset').setStyle('display', 'none');
            $('prev_experience_fieldset').setStyle('display', 'none');
            $('criminal_history_fieldset').setStyle('display', 'none');
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            break; 
        case 3:   
            $('personal_details_fieldset').setStyle('display', 'none');
            $('prev_employment_fieldset').setStyle('display', 'none');
            $('prev_experience_fieldset').setStyle('display', 'none');
            $('criminal_history_fieldset').setStyle('display', 'none');
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            break;  
        case 4:   
            $('prev_employment_fieldset').setStyle('display', 'none');
            $('prev_experience_fieldset').setStyle('display', 'none');
            $('criminal_history_fieldset').setStyle('display', 'none');
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            break;    
        case 5:   
            $('prev_experience_fieldset').setStyle('display', 'none');
            $('criminal_history_fieldset').setStyle('display', 'none');
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            break; 
        case 6:   
            $('criminal_history_fieldset').setStyle('display', 'none');
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            break; 
        case 7:   
            $('duties_fieldset').setStyle('display', 'none');
            $('other_info_fieldset').setStyle('display', 'none');
            break;
        case 8:   
            $('other_info_fieldset').setStyle('display', 'none');
            break;               
    }    
}

/**
 * Once the page is fully loaded, we set up the "flow"
 *
 */
window.addEvent('domready', function() {    
               
    var scroll = new Fx.Scroll(window);
    resetForm(1);       

    // Complete
    $('next').addEvent('click', function() {
    
        var error = false;
        
        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });
                
        var form_items = $$('#initial input, #initial select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }            
            
        });
        
        if( ! error) {
            if(($('aged_over_21').get('value').toLowerCase() == 'yes') && ($('live_away_from_home').get('value').toLowerCase() == 'yes') && ($('driving_licence_type').get('value') == 'Full')) {
                

                errorHandler.hideErrors();
                
                $('nationality_fieldset').setStyle('display', 'block');                
                scroll.toBottom();
				pageTracker._trackPageview('/candidates_home/apply/');
                
            } else {
                  
                resetForm(1);
                // errorHandler.showError('Oops, looks like you don\'t meet the criteria required to become a PA.');
                window.location = 'http://www.activeassistance.com/candidates/apply/application-unsuccessful/';
            }            
        } else {
            
            resetForm(1);
            
        }
        
    });
    
    // Complete
    $('member_eea').addEvent('change', function(event) {
    
        if($('member_eea').get('value').toLowerCase() == 'yes') {
        
            $('valid_work_permit').setStyle('display', 'none');
            $('valid_work_permit_label').setStyle('display', 'none');
            
        } else {
            
            $('valid_work_permit').setStyle('display', 'block');
            $('valid_work_permit_label').setStyle('display', 'block');            
        
        }
        
    });
    
    // Complete
    $('next2').addEvent('click', function() {
   
    
        if(($('member_eea').get('value').toLowerCase() == 'yes') || ($('valid_work_permit').get('value').toLowerCase() == 'yes')) {
            
            errorHandler.hideErrors();
            
            $('personal_information_fieldset').setStyle('display', 'block');
            scroll.toBottom();
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=2');
            
        } else {
        
            resetForm(2);
            // errorHandler.showError('Oops, looks like you don\'t meet the criteria required to become a PA.');
            window.location = 'http://www.activeassistance.com/candidates/apply/application-unsuccessful-wp/';
        }
        
    }); 

    // Complete
    $('next3').addEvent('click', function() {
    
        var error = false;
        var currentTime = new Date()
    
        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });
                
        // Need to make sure this doesn't check mobile telephone
        var form_items = $$('#title, #full_name, #address1, #town, #postcode, #country, #home_tel, #email, #dob_day, #dob_month, #dob_year, #nationality');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }
                        
        });
        
        if(checkEmail($('email').get('value')) != true) {
            var myFirstElement  = new Element('span', {'class': 'error', html: 'Please enter a valid email address!'});
            $('email').grab(myFirstElement, 'after');   
            error = true;
        } 
        
        var date_items = $$('#dob_day, #dob_month, #dob_year');
        date_items.each(function(item) {
            if( ! isNumber.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field must be numeric'});
                item.grab(myFirstElement, 'after');   
                error = true;                
            }
        });
        
        if((currentTime.getFullYear() - $('dob_year').get('value').toInt()) < 21) {
            var myFirstElement  = new Element('span', {'class': 'error', html: 'You must be over 21 to apply.'});
            $('dob_year').grab(myFirstElement, 'after');   
            error = true;                
        }
        
        // The form must be ok, so lets continue
        if( ! error) {
            resetForm(3);
            $('personal_details_fieldset').setStyle('display', 'block');
            scroll.toElement('personal_details_fieldset');
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=4');
        }
        
    });   
      
    $('drink_drugs').addEvent('change', function() {
        if($('drink_drugs').get('value').toLowerCase() == 'yes') {
            var els = $$('#drink_drugs_details, label[for="drink_drugs_details"]');
            els.each(function(item) {
                item.setStyle('display', 'block');
            });
        } else {
            var els = $$('#drink_drugs_details, label[for="drink_drugs_details"]');
            els.each(function(item) {
                item.setStyle('display', 'none');
            });
        }         
    });          
    $('back_problems').addEvent('change', function() {
        if($('back_problems').get('value').toLowerCase() == 'yes') {
            var els = $$('#back_problems_details, label[for="back_problems_details"]');
            els.each(function(item) {
                item.setStyle('display', 'block');
            });
        } else {
            var els = $$('#back_problems_details, label[for="back_problems_details"]');
            els.each(function(item) {
                item.setStyle('display', 'none');
            });
        }         
    });   
    
    // Complete
    $('next4').addEvent('click', function() {
    
        var error = false;
        
        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });
                
        var form_items = $$('#personal_details_fieldset select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }
                        
        }); 

        // The form must be ok, so lets continue
        if( ! error) {
            resetForm(4);
            $('prev_employment_fieldset').setStyle('display', 'block');
            scroll.toBottom();
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=5');
			
        } else {
            resetForm(4);
        }
        
    });
    
    // Complete
    $('next5').addEvent('click', function() {
        var error = false;
    
        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });
                
		if(checkTextError($('employer')) == true) {
			error = true;
		}           
		if(checkTextError($('employer_address1')) == true) {
			error = true;
		}           
		if(checkTextError($('employer_town')) == true) {
			error = true;
		}           
		if(checkTextError($('employer_country')) == true) {
			error = true;
		}           
		if(checkTextError($('position_held')) == true) {
			error = true;
		}           
		if(checkTextError($('salary')) == true) {
			error = true;
		}           
		if(checkNumberError($('date_started_day')) == true) {
			error = true;
		}           
		if(checkNumberError($('date_started_month')) == true) {
			error = true;
		}           
		if(checkNumberError($('date_started_year')) == true) {
			error = true;
		}   
        
        if( ! error) {
            resetForm(5);
            $('prev_experience_fieldset').setStyle('display', 'block');
            scroll.toBottom();
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=6');			
        } else {
            resetForm(5);
        }
    });
    
    // Complete
    $('next6').addEvent('click', function() {
        var error = false;

        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });        
        
        if(isEmpty.test($('care_experience'))) {
            var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
            $('care_experience').grab(myFirstElement, 'after');   
            error = true;                        
        }
        
        if( ! error) {
            resetForm(6);
            $('criminal_history_fieldset').setStyle('display', 'block');
            scroll.toBottom();
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=7');
			
        } else {
            resetForm(6);
        }        
    });
    
    
    $('criminal_record').addEvent('change', function() {
        if($('criminal_record').get('value').toLowerCase() == 'yes') {
            var els = $$('#criminal_record_details, label[for="criminal_record_details"]');
            els.each(function(item) {
                item.setStyle('display', 'block');
            });
        } else {
            var els = $$('#criminal_record_details, label[for="criminal_record_details"]');
            els.each(function(item) {
                item.setStyle('display', 'none');
            });
        }        
    });
    
    // Complete
    $('next7').addEvent('click', function() {
        var error = false;

        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });   
        
        var form_items = $$('#criminal_history_fieldset select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }            
            
        }); 
        
        if( ! error) {
            resetForm(7);
            $('duties_fieldset').setStyle('display', 'block');
            scroll.toBottom();
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=8');
			
        } else {
            resetForm(7);
        }          
    });
    
    
    $('next8').addEvent('click', function() {
        var error = false;
    
        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });                
        
        if(checkCheckboxChecked($('driving_ok')) == true) {
            error = true;
        };         
        if(checkCheckboxChecked($('personal_care_ok')) == true) {
            error = true;
        };         
        if(checkCheckboxChecked($('household_duties_ok')) == true) {
            error = true;
        };         
      
        if( ! error) {
            resetForm(8);
            $('other_info_fieldset').setStyle('display', 'block');
            scroll.toBottom();
			pageTracker._trackPageview('/candidates_home/apply/?enquiryFormStage=9');
			
        } else {
            resetForm(8);
        }       
    });
    
    // Complete
    $('submit').addEvent('click', function() {
        
        var error = false;
    
        var errors = $$('.error');
        errors.each(function(errorMsg) {
            errorMsg.destroy();
        });
        
        var form_items = $$('#criminal_history_fieldset select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }            
            
        }); 
        
        
        if(isEmpty.test($('care_experience'))) {
            var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
            $('care_experience').grab(myFirstElement, 'after');   
            error = true;                        
        }        

        if(checkCheckboxChecked($('household_duties_ok')) == true) {
            error = true;
        };          
        if(checkCheckboxChecked($('personal_care_ok')) == true) {
            error = true;
        };          
        if(checkCheckboxChecked($('driving_ok')) == true) { 
            error = true;
        };          
        if(checkNumberError($('start_date_month')) == true) {
            error = true;
        };          
        if(checkNumberError($('start_date_year')) == true) {
            error = true;
        };          
        if(checkTextError($('employer')) == true) {
            error = true;
        };          
        if(checkTextError($('employer_address1')) == true) {
            error = true;
        };          
        if(checkTextError($('employer_town')) == true) {
            error = true;
        };          
        if(checkTextError($('employer_country')) == true) {
            error = true;
        };          
        if(checkTextError($('position_held')) == true) {
            error = true;
        };          
        if(checkTextError($('salary')) == true) {
            error = true;
        };          
        if(checkNumberError($('date_started_day')) == true) {
            error = true;
        };          
        if(checkNumberError($('date_started_month')) == true) {
            error = true;
        };          
        if(checkNumberError($('date_started_year')) == true) {
            error = true;
        };     

        var form_items = $$('#other_info_fieldset select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }            
            
        });  
        
        var form_items = $$('#personal_details_fieldset select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }
                        
        });    
        
        var form_items = $$('#title, #full_name, #address1, #town, #postcode, #country, #home_tel, #email, #dob_day, #dob_month, #dob_year, #nationality');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }
                        
        });
        
        var date_items = $$('#dob_day, #dob_month, #dob_year');
        date_items.each(function(item) {
            if( ! isNumber.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field must be numeric'});
                item.grab(myFirstElement, 'after');   
                error = true;                
            }
        });    

        if(($('member_eea').get('value').toLowerCase() == 'yes') || ($('valid_work_permit').get('value').toLowerCase() == 'yes')) {
            
            errorHandler.hideErrors();
            
            $('personal_information_fieldset').setStyle('display', 'block');
            
        } else {
        
            resetForm(2);
            window.location = 'http://www.activeassistance.com/candidates/apply/application-unsuccessful-wp/';
        } 

        var form_items = $$('#initial input, #initial select');
        form_items.each(function(item) {
            
        
            if(isEmpty.test(item)) {
                var myFirstElement  = new Element('span', {'class': 'error', html: 'This field is required'});
                item.grab(myFirstElement, 'after');   
                error = true;
            }            
            
        });                
        
        if(error) {
            return false;
        } else {
			pageTracker._trackPageview('/candidates_home/apply/thanks/');
            return true;
        }
    });
});

