var form;

window.addEvent('domready', function() {
    form = new RecommendAFriendForm();
}); 

var RecommendAFriendForm = new Class({
    initialize: function() {
        this.registerEventHandlers();
    },
    
    registerEventHandlers: function() {
        $('recommendAFriend').addEvent('submit', this.validate.bind(this));
        $('addAnotherFriend').addEvent('click', this.addAnotherFriend.bind(this));
    },
    
    addAnotherFriend: function() {
        if($$('.friend-details').length >= 5) {
            var error = 'Sorry, you can only add up to 5 friends at once.';
            alert(error);
            return false;
        }
        
        var friendDetailsFieldSet = $$('.friend-details')[0].clone();
        friendDetailsFieldSet.injectBefore($('submit'));
        
        var removeLink = friendDetailsFieldSet.getElement('.remove-friend');
        removeLink.addEvent('click', this.removeFriend.bind(this, removeLink.getParent('fieldset')));
        removeLink.setStyle('display', 'inline');
        
        friendDetailsFieldSet.getElements('input[type=text]').each(function(input) {
            input.removeClass('red');
            input.value = '';
        });
        
        new Fx.Scroll(window).toElement(friendDetailsFieldSet);
        
        return false;
    },
    
    removeFriend: function(friend) {
        friend.destroy();
        return false;
    },
    
    validate: function() {
        errorCount = 0;
        errors = new Array();

        clearErrors();
	    
        stuffError(validatePresence("YourName", "Please enter your Name."));
        stuffError(validatePresence("BrooksonId", "Please enter your Unique Brookson ID."));
	    if ($('BrooksonId').value != '') {
    	    stuffError(validatePattern("BrooksonId", /^\d{6}$/, "Please enter the 6 digit Brookson ID, if you don't know your customer number then please either examine your invoice statement or call Brookson Membership Services Team on 08450581200"));
	    }
        
        stuffError(validatePresence("YourEmail", "Please enter your Email Address."));
	    if ($('YourEmail').value != '') {
		    stuffError(validatePattern("YourEmail", /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/, "Please enter a valid internet email address"));
	    }
        
        $$('.friend-details').each(function(friend, index) {
            stuffError(validatePresence(friend.getElement('input[name=FriendName]'), "Please Enter Friend " + (index + 1) + "'s Name"));

            var friendEmail = friend.getElement('input[name=FriendEmail]');
            stuffError(validatePresence(friendEmail, "Please Enter Friend " + (index + 1) + "'s Email Address"));
            if (friendEmail.value != '') {
	            stuffError(validatePattern(friendEmail, /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/, "Please Enter A Valid Internet Email Address For Friend " + (index + 1)));
            }
            
            var friendPhoneNumber = friend.getElement('input[name=FriendPhone]');
            stuffError(validatePresence(friendPhoneNumber, "Please Enter Friend " + (index + 1) + "'s Telephone Number"));
            if (friendPhoneNumber.value != '') {
                stuffError(validatePattern(friendPhoneNumber, /^0\d{2,4}[ -]?[\d]{3}[\d -]{1}[\d -]{1}[\d]{1,4}$/, "Please Enter A Valid Phone Number For Friend " + (index + 1)));
            }
            
            stuffError(validatePresence(friend.getElement('input[name=FriendAddress1]'), "Please Enter Friend " + (index + 1) + "'s House No and Street"));
            stuffError(validatePresence(friend.getElement('input[name=FriendAddress2]'), "Please Enter Friend " + (index + 1) + "'s Town or City"));
            stuffError(validatePresence(friend.getElement('input[name=FriendAddress3]'), "Please Enter Friend " + (index + 1) + "'s County"));
            
            var friendPostCode = friend.getElement('input[name=FriendPostcode]');
            stuffError(validatePresence(friendPostCode, "Please Enter Friend " + (index + 1) + "'s Post Code"));
            if (friendPostCode.value != '') {
                stuffError(validatePattern(friendPostCode, /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {0,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i, "Please Enter A Valid Post Code For Friend " + (index + 1)));
            }
        });
	    
        if (errorCount > 0) { 
            alertErrors(errors);
            new Fx.Scroll(window).toElement($('error'));
        }
    
        return (errorCount == 0);
    }
});